Заместитель
Proxy
Last updated
Was this helpful?
Proxy
Last updated
Was this helpful?
Паттерн проектирования заместитель (Proxy) имитирует интерфейс и поведение оригинального объекта и контролирует доступ к нему.
Назначение паттерна заместитель заключается в добавлении дополнительного уровня абстракции между клиентом и реальным объектом.
предоставление локального объекта, который работает с удаленным объектом, скрывая детали удаленного взаимодействия [удаленный заместитель (Remote Proxy)]
создание заглушки для ресурсоемкого объекта, позволяющей откладывать его создание или загрузку до момента реального использования [виртуальный прокси (Virtual Proxy)]
контроль доступа к объекту, ограничение различных операций в зависимости от прав доступа [защищающий заместитель (Protection Proxy)]
выполнение дополнительных действий при доступе к объекту, например, подсчет ссылок на объект или отслеживание изменений ["умная" ссылка (Smart Reference)]
кэширование результатов операций объекта для избегания повторных вычислений или загрузки [кэширующий заместитель (Caching Proxy)]
контроль доступа к объекту
возможность работы при отсутствии самого объекта
упрощение работы с ресурсоемкими объектами, "разгрузка" тяжелого оригинального объекта
добавление дополнительного функционала перед или после обращения к оригинальному объекту
возможность отвечать за жизненный цикл объекта
кэширование: возможность хранить результаты операций и предоставлять их повторно без обращения к оригинальному объекту
увеличение накладных расходов: увеличение времени выполнения операций
усложнение кода: необходимость в добавлении дополнительных классов и методов
: предоставляет другой интерфейс к адаптируемому объекту. Напротив, заместитель в точности повторяет интерфейс своего субъекта.
: реализация паттерна декоратор похожа на реализацию заместителя, но назначение совершенно иное. Декоратор добавляет объекту новые обязанности, а заместитель контролирует доступ к объекту.
: заместитель может быть создан с помощью фабричного метода. Фабричный метод позволяет инкапсулировать процесс создания заместителя и предоставляет гибкость в выборе типа заместителя, который будет создан.
: заместитель может быть реализован как одиночка, гарантируя, что будет создан только один объект заместителя для доступа к оригинальному объекту
: заместитель может использоваться для введения различных стратегий доступа к объекту.