Мой коллега спросил меня о шаблоне проектирования моей реализации службы Windows WCF в клиентском приложении ASP.net, и я действительно не мог сказать, является ли это мост или адаптер strong. >!
Вот реализация:
- Я получил договор на обслуживание
- Определен новый интерфейс, похожий на мой контракт данных WCF
- Я создал клиент WCF и обернул его в новый интерфейс.
- Сопоставил новые операции интерфейса с исходным клиентом WCF (здесь я веду журнал и обрабатываю ошибки)
Я всегда думал об этом как о реализации шаблона Адаптер, но на самом деле не могу сказать, почему это не Мост!
Я прочитал все сообщения здесь, в SO, GoF и википедии, но это действительно бессмысленно!
Насколько я понимаю, оба шаблона указывают на существующий тип, оба отделяют абстракцию от ее реализации, я упустил момент?
Вот от GoF:
Ключевое различие между этими шаблонами заключается в их предназначении. Адаптер фокусируется на устранении несовместимости между двумя существующими интерфейсами. Он не фокусируется на том, как эти интерфейсы реализованы, и не рассматривает, как они могут развиваться независимо. Это способ заставить два независимо разработанных класса работать вместе без повторной реализации одного или другого. С другой стороны, мост соединяет абстракцию и ее (потенциально многочисленные) реализации. Он обеспечивает стабильный интерфейс для клиентов, даже если позволяет вам варьировать классы, которые его реализуют. Он также включает новые реализации по мере развития системы.
Я не совсем понимаю приведенное выше утверждение,
- Означает ли это, что если я изменю адаптируемый объект или изменю реализацию исходного интерфейса во время разработки, то это будет Шаблон моста?
- Различия звучат банально, есть ли другие отличия в реализации / абстракции?
- Как узнать, какая реализация используется после разработки?
- Может ли кто-нибудь дать мне хороший пример шаблона моста и того, как его можно изменить в течение жизненного цикла программного обеспечения?
Обновлять:
Опять же из GoF:
Помните, что адаптер заставляет два существующих интерфейса работать вместе, а не определять совершенно новый.
Означает ли это, что изменение существующего интерфейса таким образом, чтобы он мог работать с другим интерфейсом, является реализацией адаптера?
Обновление2:
Только что нашел эту невероятную статью: Иллюстрированные шаблоны проектирования GOF на C #
Это настоящая структура Bridge Patter:
Мне не хватало того факта, что шаблон «Мост» позволяет комбинировать различные абстракции и реализации и расширять их независимо