Что такое шаблон двустороннего адаптера

#design-patterns

#шаблоны проектирования

Вопрос:

В книге Design Patterns by GoF (Eric Gamma и другие) упоминается шаблон двустороннего адаптера, который используется для прозрачности. Они полезны, когда 2 разных клиента хотят по-разному просматривать один и тот же объект. Может ли кто-нибудь привести пример C для того же и в каких практических сценариях его можно использовать??

Комментарии:

1. 🙂 нет, нет.. Это не домашнее задание, я готовлюсь к собеседованию, и хотя я понимаю шаблон адаптера, я не понял использования двустороннего адаптера. Я упомянул C , потому что примеры в этой книге приведены на языке Smalltalk, о котором я не знаю.

2. Но все примеры в книге написаны на C или Smalltalk. Почему бы просто не взглянуть на код, заданный GoF? Или это было дано в Smalltalk? Извините, у меня здесь нет моего текста для проверки.

3. В книге в примере рассматриваются только обычные шаблоны адаптеров — адаптер класса или адаптер объекта. Я думаю, что двусторонние адаптеры отличаются от этих.

Ответ №1:

Двухсторонние адаптеры — это адаптеры, которые реализуют оба интерфейса Target и Adaptee. Адаптированный объект может использоваться в качестве целевого в новых системах, работающих с целевыми классами, или в качестве адаптируемого в других системах, работающих с адаптируемыми классами. Продолжая эту линию мышления, мы можем иметь адаптеры, реализующие n интерфейсов, адаптирующиеся к n системам. Двухсторонние адаптеры и n-полосные адаптеры сложно реализовать в системах, не поддерживающих множественное наследование. Если адаптеру необходимо расширить целевой класс, он не может расширить другой класс, такой как Adaptee, поэтому Adaptee должен быть интерфейсом, и все вызовы должны быть делегированы от адаптера к объекту Adaptee.

Шаблон проектирования адаптера

Источник: http://www.oodesign.com/adapter-pattern.html

Ответ №2:

Я считаю, что объяснение, приведенное здесь, довольно хорошее. Это пример C #, но объяснение понятно, и пример можно довольно легко перевести в код C . Пример также довольно подробный.

Комментарии:

1. Хорошо, итак, единственное различие между двусторонним адаптером и адаптером классического класса заключается в следующем: 1) доступ к адаптеру классического класса можно получить только через интерфейс Itarget / client 2) доступ к двустороннему адаптеру можно получить как через интерфейс Itarget / class, так и через интерфейс adaptee

Ответ №3:

Как объясняет Go4 (страница 143 для меня), это расширение адаптера для множественного наследования. Вместо расширения одного типа интерфейса класс адаптера расширяет два.