Перейти к основному содержимому

Заместитель (Proxy)

Теория

Заместитель - предоставляет суррогатный объект, управляющий доступом к другому объекту. Одни из вариантов Заместителя:

  • Удаленный Заместитель управляет взаимодействием клиента с удаленных объектом.
  • Виртуальный Заместитель управляет доступом к объекту, создание которого сопряжено с большими затратами.
  • Защитный Заместитель управляет доступом к методам объекта в зависимости от привилегий вызывающей стороны.

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

Заместители, как и любые "обертки", увеличивают количество классов и объектов в архитектуре.

БСП

Примеры

Код

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

  1. Создаем обработку ПроксиВебСервиса со следующим интерфейсом:
Функция КурсВалюты(Валюта) Экспорт
  1. В модуле обработки переопределяем эту функцию с логикой кэширования, используя внутри вызов оригинального сервиса.
Перем КурсВалютВКэше;

Функция КурсВалюты(Валюта) Экспорт

Если КурсВалютВКэше = Неопределено Тогда

КурсВалютВКэше = ВнешнийВебСервис.ПолучитьКурсВалют();

КонецЕсли;

Возврат КурсВалютВКэше[Валюта];

КонецФункции
  1. Вызов веб-сервиса осуществляется через функцию КурсВалюты из обработки ПроксиВебСервиса.
Курс = ПроксиВебСервиса.КурсВалюты("USD");

В таком варианте реализуется основная идея Прокси - дополнительный слой контроля доступа к оригинальному сервису через заместителя.