2010-09-22 3 views
5

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

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

Спасибо

ответ

7

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

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

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

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

16

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

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

Вот как я это понимаю.

EDIT: Кстати, я лично считаю, что вам не нужно видеть имена шаблонов проектов как конечные все-все-все. Выберите правильный шаблон, основанный на том, чего вы хотите достичь, и назовите его, как хотите.

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