Паттерн Proxy (Заместитель).

Паттерн Proxy относится к числу структурных паттернов проектирования.

Proxy-объект — это некоторый промежуточный объект, дублирующий функционал реального объекта и ограничивающий к нему доступ. Proxy-объект подставляется вместо реального объекта и полностью дублирует его поведение. Более наглядно это можно увидеть на следующей картинке:

proxy-pattern

Клиент по-прежнему общается с реальном объектом, но не напрямую. Вместо него подставляется объект-заместитель. Заместителю нужно хранить ссылку на реальный объект для переадресации всех запросов ему. Перед вызовами операций реального объекта, proxy-объект может выполнить какие-то другие действия, например, выполнить контроль доступа к нему. Ниже приводим диаграмму, представляющую данный паттерн:

pattern_proxy_diagram

Классы Proxy и RealSubject реализуют общий интерфейс Subject. Клиент взаимодействует с субъектом, он ничего не знает о том, с каким именно из них ему приходится иметь дело. В то же время прокси-объект хранит ссылку на объект класса RealSubject и при посылке запроса субъекту, выполняет вызов метода реального объекта.

Давайте теперь реализуем небольшой пример, связанный с отложенной загрузкой изображений на странице. Допустим, что вы просматриваете большой веб-документ, который содержит много изображений. В этом случае имеет смысл использовать отложенную загрузку — то есть загружать изображение только тогда, когда оно появится на экране. Для начала создадим общий интерфейс Image:

Он содержит только один метод display() для отрисовки изображения на экране. Теперь реализуем интерфейс в классах RealImage и ProxyImage, которые будут представлять собой реальное изображений и промежуточный объект.

Содержимое файла RealImage.java:

Данный класс реализует общий интерфейс Image, но добавляет и новые приватный метод — загрузка изображения по переданному URL. При вызове метода display() оно будет отображено на экране.

Прокси-объект повторяет интерфейс реального объекта, а реальное изображение появится на экране только после вызова метода display(), в котором прокси-объект делегирует эту операцию реальному объекту. До создания реального объекта можно было отрисовать на экране какой-то простое изображение, чтобы минимизировать накладные расходы.

Это только один из распространенных примеров использования паттерна Proxy, который теперь вы сможете использовать в своих проектах.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *