#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.
Ответ №2:
Я считаю, что объяснение, приведенное здесь, довольно хорошее. Это пример C #, но объяснение понятно, и пример можно довольно легко перевести в код C . Пример также довольно подробный.
Комментарии:
1. Хорошо, итак, единственное различие между двусторонним адаптером и адаптером классического класса заключается в следующем: 1) доступ к адаптеру классического класса можно получить только через интерфейс Itarget / client 2) доступ к двустороннему адаптеру можно получить как через интерфейс Itarget / class, так и через интерфейс adaptee
Ответ №3:
Как объясняет Go4 (страница 143 для меня), это расширение адаптера для множественного наследования. Вместо расширения одного типа интерфейса класс адаптера расширяет два.