Заместитель (Proxy) - Структурные - Шаблоны проектирования - Каталог статей - Персональный сайт
Воскресенье, 20.05.2012, 21:16
Приветствую Вас Гость

Дневники разработчика

Меню сайта
Категории каталога
Структурные [3]
Структурные (Structural) шаблоны проектирования
Порождающие [1]
Порождающие (Creational) шаблоны проектирования
Главная » Статьи » Шаблоны проектирования » Структурные

Заместитель (Proxy)
Определение
Заместитель - шаблон, контролирующий доступ к объектам, обеспечивая их
более оптимальное взаимодействие.

Предоставляет объект-заместитель (surrogate) или объект-заменитель (placeholder)
для доступа к другому объекту.

Оборачивая доступ к реальному компоненту, уменьшает сложность работы с ним.

Пример
Банковский чек по сути является заместителем денег на банковском счете.
Чек может быть использован вместо денег для покупок и по сути управляет
доступом к деньгам на счете владельца.

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

Существует три различных типа Заместителей:
- Удаленные Заместители (remote proxies) ответственны за кодирование запроса и его
перенаправление реальному объекту в другое адресное пространство (домен приложения,
процесс или компьютер)
- Виртуальные Заместители(virtual proxies) создают "тяжелые" объекты по требованию
(этот процесс известен под разными названиями, такими как "just-in-time loading",
"on-demand loading", "lazy loading").
- Защищающие прокси (protection proxies) контролируют, имеет ли вызывающая сторона
права доступа для выполнения запроса.

Шаблон Заместитель в .NET Framework
В .NET Framework шаблон Заместитель используется в инфраструктуре Remoting.
В .NET Remoting, если объекту требуется доступ к объекту в другом адресном пространстве,
(домен приложения, процесс или компьютер) создается прокси объект, который посылает запрос
в удаленный объект и передает ему необходимые данные. Обычно клиент даже не догадывается
о том, что взаимодействие происходит через прокси.

Клиенты WCF служб также часто используют автоматически генерируемые прокси объекты.

Шаблон Заместитель в сравнении с другими шаблонами.
Адаптер обеспечивает отличающийся интерфейс к объекту.
Прокси обеспечивает тот же самый интерфейс.
Декоратор обеспечивает расширенный интерфейс.

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

Ссылки
Наиболее подробное описание:
http://codelab.ru/pattern/proxy/

Пример с dofactory.com:
http://www.dofactory.com/Patterns/PatternProxy.aspx

Wikipedia (english):
http://en.wikipedia.org/wiki/Proxy_pattern

Статья с примерами на различных языках (english):
http://sourcemaking.com/design_patterns/proxy/

Категория: Структурные | Добавил: alekseiru (09.03.2009)
Просмотров: 19509 | Рейтинг: 5.0/3 |
Форма входа
E-mail:
Пароль:
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0