Прокси — это интерфейс для базовой функциональности. У него много целей. Его можно использовать для добавления других функций, добавления некоторого контроля доступа к базовым функциям и т. д.
В отличие от декораторов, прокси имеет тот же интерфейс, что и базовый класс, и не обеспечивает какой-либо агрегации функций.
Существует множество различных типов прокси-шаблонов. В этом блоге мы будем обсуждать защиту прокси.
Прокси защиты
Допустим, у вас есть следующий код -
class Car: def __init__(self, driver): self.driver = driver def drive(self): print (f'Car is being driven by {self.driver.name}') class Driver: def __init__(self, name, age): self.name = name self.age = age if __name__ == '__main__': driver1 = Driver("Bob", 23) car = Car(driver1) car.drive() # OUTPUT # Car is being driven by Bob
Теперь, если вы хотите добавить функциональность, когда автомобилем не может управлять человек моложе 16 лет, вам придется изменить функцию привода и нарушить принцип открытия-закрытия.
Но вы все равно можете сделать это с помощью прокси. Создайте класс CarProxy, который позаботится об этой дополнительной функциональности.
class Car: def __init__(self, driver): self.driver = driver def drive(self): print (f'Car is being driven by {self.driver.name}') class Driver: def __init__(self, name, age): self.name = name self.age = age class CarProxy: def __init__(self, driver): self.driver = driver self._car = Car(self.driver) def drive(self): if self.driver.age < 16: print("Too young to drive") else: self._car.drive() if __name__ == '__main__': driver1 = Driver("Bob", 23) car = CarProxy(driver1) car.drive() driver2 = Driver("Bob", 12) car = CarProxy(driver2) car.drive() # OUTPUT # Car is being driven by Bob # Too young to drive
Ссылка — https://www.udemy.com/course/design-patterns-python/
Следуйте моему списку шаблонов дизайна Python, чтобы узнать больше — https://medium.com/@rjrichajain00/list/python-design-patterns-4dbd16f87858