2014-12-13 3 views
1

Глядя на UML diagram on wikipedia, как прокси-класс, так и субъектный класс реализуют один и тот же интерфейс.Почему шаблон прокси требует наследования?

Из того, что я понимаю, целью класса прокси является делегирование. Это можно сделать с помощью композиции; делегированный класс (ы) не должен реализовывать один и тот же интерфейс.

Есть ли причина, по которой предметный класс должен реализовать тот же интерфейс, что и прокси-класс?

ответ

3

Есть ли причина, по которой предметный класс должен реализовать тот же интерфейс, что и прокси-класс?

Да, но это другой путь вокруг прокси должен реализовать тот же интерфейс, как субъекта

Клиент не понимает, что экземпляр его использования является прокси! Клиент считает, что это Subject

+0

Является ли это только ценным, если речь идет о фабрике? Если клиент использует тему, а позже я хочу, чтобы вместо этого использовался прокси-сервер, как я могу это сделать? (также наоборот). – neverendingqs

+0

Вы правы, что для того, чтобы «Клиент» не знал, в какой реализации он, вы должны предоставить Клиенту экземпляр «Subject» (либо прокси, либо реальный предмет). Это можно сделать с помощью шаблона фабрики, но также может быть введена зависимость через вызов конструктора или метода. – dkatzel

+0

Если клиент использует объект до этого шаблона, вам нужно будет изменить клиент, чтобы он использовал абстракцию темы прокси-шаблона (которая выглядит почти как старый объект). Тогда Клиент не знает, разговаривает ли он с Субъектом или его Прокси. – Fuhrmanator

1

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

1

Это было бы скорее как адаптер (и объектный адаптер, чтобы использовать терминологию книги «Банда четырех»). Адаптер обычно используется, когда вы обнаруживаете позже в проекте, для которого требуется адаптация интерфейса. Я полагаю, вы разрабатываете прокси-серверы.

Одной из причин может быть то, что Proxies должен быть прозрачным для вашего клиента. Если Proxies имеют разные интерфейсы, чем объекты, то эта прозрачность будет нарушена. Просто подумайте о прецеденте, когда не все ваши субъекты должны быть проксированы, например. не все ваши объекты «удалены».

+0

Я думаю, что этот вопрос помог мне разобраться в различиях: http://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adapter-and-bridge-patterns-differ – neverendingqs

Смежные вопросы