Серия паттернов «Красота дизайна» (20 из 20)

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

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

Далее следует история кода.

У нас есть два рынка (один и два). Однако, прежде чем пользователи смогут получить к нему доступ (узнать цену конкретного товара), мы хотели бы указать некоторый уровень безопасности. Проверьте, есть ли у пользователя пароль и является ли он премиум-членом. Затем они могут искать на всех рынках. Если у пользователя есть только пароль, но он не является премиум-участником, он может выполнять поиск только на MarketPlaceOne.

Из приведенного ниже исходного кода у нас есть класс для MarketPlaceOne и MarketPlaceTwo, каждый из которых наследуется от MarketPlace, поэтому они могут получить доступ к методу find_price. В основной строке программы мы создаем трех пользователей (Джон, Энн и Дженн), у каждого из которых есть определенные данные. Например, у Джона есть пароль и премиум-член.

Мы создаем класс MarketPlaceProxy, который содержит две ссылки на объекты MarketPlaceOne и MarketPlaceTwo. Пользователь запрашивает find_price, который нельзя запросить непосредственно на торговой площадке, но он должен пройти через прокси (поскольку разрешен только прокси со ссылками на обе торговые площадки).

Он находится внутри find_price в MarketPlaceProxy (фильтрующая часть). Сначала он проверит свойства пользователя (пароль и премиум-член), и если он пройдет, то передаст запрос методу find_price реального рынка.

Преимущество этой логики заключается в том, что пользователям не нужно знать, сколько торговых точек есть у компании прямо сейчас, и она скрывает от пользователей сложность логики find_price. Когда компания добавляет еще одну новую торговую площадку, мы просто меняем код внутри прокси торговой площадки.