Шаблон проектирования "Заместитель" (Proxy)

Proxy — это структурный паттерн проектирования, предоставляющий объект, который, в свою очередь, контролирует доступ к другому объекту путем перехвата всех вызовов. Также можно сказать, что шаблон "Заместитель" выполняет функцию контейнера. Рассмотрим примеры его реализации и использования.

Но для начала -- случай из жизни. Представьте себе дверь, которую можно открыть лишь картой доступа либо нажатием кнопки.

Главная функциональность двери — это ее открытие, а заместитель, который добавлен поверх (кнопка, карт-ридер), отвечает за безопасность и расширяет функциональность. Иными словами, с помощью Proxy-шаблона класс станет отображать функциональность другого класса.

Для наилучшего понимания перейдем к коду. Итак, существует интерфейс Door и реализация этого интерфейса:

Также у нас существует заместитель Security, обеспечивающий защиту любых дверей:

Ну а общий пример имплементации выглядит так:

Также вам может быть интересен пример имплементации на Java.

По материалам статьи «Design Patterns for Humans».