Различия между шаблоном прокси и шаблоном адаптера? - PullRequest
5 голосов
/ 22 сентября 2010

Кажется, что между шаблонами Proxy и Adapter есть сходство?

Может ли кто-нибудь объяснить, в чем различия?Почему мы требуем их обоих?При каких проблемах мы должны использовать только прокси, а НЕ другой по примеру .net?

Спасибо

Ответы [ 2 ]

16 голосов
/ 22 сентября 2010

Прокси демонстрирует точно такое же поведение, что и объект, который он скрывает.Прокси-сервер обычно используется для связи с удаленным объектом без необходимости знать, как с ним связаться.Примером является служба WCF, вы можете инкапсулировать доступ к службе в прокси, который предоставляет тот же интерфейс, что и служба wcf, но скрывает детали реализации, такие как использование Channelfactory и обработка faultexceptions и т. Д. Это как ваш клиент говоритв службу WCF локально.

Адаптер также скрывает базовый объект, но он преобразует данные, которыми вы обмениваетесь с ним, в правильный формат и содержимое, используемое базовым объектом.Примером действительно является устаревшая система, как говорит Гоблин.Вы инкапсулируете сложность общения с унаследованной системой (возможно, она использует болтливый или CRUDy API, и вы хотите скрыть это за грубой операцией) в адаптер, чтобы предоставить своим клиентам простой способ общения с унаследованной системой.

Вот так я понимаю, по крайней мере.

РЕДАКТИРОВАТЬ: кстати, лично я чувствую, что вам не нужно рассматривать имена шаблонов проектирования как конечный результат.Выберите правильный шаблон на основе того, чего вы хотите достичь, и назовите его как хотите.

7 голосов
/ 22 сентября 2010

Прокси обычно используются для следующих сценариев:

  • Базовый «реальный» объект дорог в создании.Затем прокси-сервер будет заполнителем во время его создания (типичный пример - значок индикатора выполнения при загрузке огромного изображения).Ленивая загрузка - еще один типичный пример.Идея заключается в том, что мы не знаем, будет ли когда-либо пользователь щелкать панель «Детали», поэтому мы будем откладывать загрузку до тех пор, пока он фактически не щелкнет по ней или система не будет работать.SecurityProxy) для некоторых или всех членов «реального» объекта в прокси.

Адаптеры играют другую роль - они ликвидируют разрыв между двумя классами, которые не имеют никакого отношения.Адаптер может действовать как оба объекта.Это используется, главным образом, когда нужно интегрироваться с унаследованными системами (или сторонними структурами в этом отношении), где невозможно изменить API.

Надеюсь, это поможет!

...