Интерфейс для доступа к определенному ресурсу
Заместитель (Proxy) – класс, который функционирует как интерфейс к определенному ресурсу. Этот ресурс может быть удаленным, дорогостоящим в создании или может требовать логирования или другой дополнительной функциональности.
- Вы вызываете
foo.Bar()
- Предполагается, что
foo
находится в том же процессе, что иBar()
- Если позже вы захотите вынести все операции, связанные с
Foo
в отдельный процесс- Можете ли вы избежать изменения кода?
- Заместитель приходит на помощь!
- Тот же интерфейс, совершенно другое поведение
- Это называется коммуникационный заместитель
- Другие типы: логирующий, виртуальный, защитный…
- Защитный
- Виртуальный
- Заместитель предоставляет идентичный интерфейс
- Декоратор предоставляет расширенный интерфейс
- Декоратор как правило агрегирует (или содержит ссылку на) то, что он декорирует; Заместитель не обязательно
- Заместитель может даже работать с не материализованным объектом
- У Заместителя такой же интерфейс, что и у базового объекта
- Чтобы создать Заместителя, просто скопируйте существующий интерфейс объекта
- Добавьте соответствующую функциональность к реплицированным функциям-челнам
- Разные Заместители (коммуникационный, логирующий, кэширующий и т.д.) ведут себя совершенно по-разному