Паттерн: Заместитель (Proxy)
1️⃣ Как кратко ответить
Паттерн "Заместитель" (Proxy) — это структурный паттерн проектирования, который предоставляет объект-заместитель для контроля доступа к другому объекту. Он используется для добавления дополнительной логики, такой как кэширование, контроль доступа или ленивую инициализацию, без изменения кода основного объекта.
2️⃣ Подробное объяснение темы
Паттерн "Заместитель" (Proxy) — это один из структурных паттернов проектирования, который позволяет создать объект, выступающий в роли интерфейса к другому объекту. Этот паттерн полезен, когда нужно контролировать доступ к объекту, добавлять дополнительную функциональность или оптимизировать работу программы.
Зачем нужен паттерн "Заместитель"?
- Контроль доступа: Proxy может ограничивать доступ к объекту, например, проверяя права пользователя перед выполнением операции.
- Кэширование: Proxy может хранить результаты операций и возвращать их, если они уже были вычислены, что экономит ресурсы.
- Ленивая инициализация: Proxy может откладывать создание ресурсоемкого объекта до момента, когда он действительно понадобится.
- Логирование и мониторинг: Proxy может записывать информацию о вызовах методов, что полезно для отладки и мониторинга.
Как работает паттерн "Заместитель"?
Proxy реализует тот же интерфейс, что и реальный объект, и содержит ссылку на него. Когда клиент вызывает метод Proxy, он может выполнить дополнительные действия до или после передачи вызова реальному объекту.
Пример использования
Рассмотрим пример с удаленным сервисом, к которому доступ может быть медленным или дорогим. Мы можем использовать Proxy для кэширования результатов.
class RealSubject:
def request(self):
print("RealSubject: Handling request.")
class Proxy:
def __init__(self, real_subject):
self._real_subject = real_subject
self._cached_result = None
def request(self):
if self._cached_result is None:
print("Proxy: Caching result for the first time.")
self._cached_result = self._real_subject.request()
else:
print("Proxy: Returning cached result.")
return self._cached_result
# Клиентский код
real_subject = RealSubject()
proxy = Proxy(real_subject)
# Первый вызов: кэширование результата
proxy.request()
# Второй вызов: использование кэша
proxy.request()
Где применяется паттерн "Заместитель"?
- Сетевые соединения: для управления доступом к удаленным ресурсам.
- Кэширование: для оптимизации производительности.
- Контроль доступа: для проверки прав пользователя.
- Ленивая инициализация: для отложенного создания объектов.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться