Лучший дизайн для использования: адаптер или фасад - PullRequest
6 голосов
/ 13 июля 2010

Я не могу решить, какой шаблон лучше всего подходит для решения следующей проблемы.

У меня есть клиентская система, которая будет взаимодействовать с отдельной подсистемой.Подсистема довольно сложна, и поэтому мне нужен интерфейс между ними для упрощения клиентской системы.Это звучит как идеальное соответствие для шаблона Facade, но я думаю, что шаблон Adapter слишком подходит для моей проблемы.

Имеет ли какое-то значение, если интерфейс в середине вызывает отдельные задачи в подсистеме с помощью простых вызовов API?

Ответы [ 6 ]

9 голосов
/ 13 июля 2010

По вашему описанию это больше соответствует принятому определению Фасада, но я бы сказал, что это скорее семантическая дискуссия, чем что-либо еще.Фасад в целом больше снижает сложность взаимодействия с целой подсистемой, в то время как адаптер больше ориентирован на настройку существующего интерфейса или на вызов ваших конкретных потребностей (например, есть базовая функциональность, но возвращаемые типы не совсем то, что вы хотите,так далее).

6 голосов
/ 13 июля 2010

Это явно похоже на шаблон «Фасад», если ваша цель - это упрощение, а не фактическая адаптация.

Определение фасада:

Обеспечение единого интерфейсана набор интерфейсов в подсистеме.Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Определение адаптера:

Преобразование интерфейса класса в другойинтерфейс клиенты ожидают.Адаптер позволяет классам работать вместе, что иначе невозможно из-за несовместимых интерфейсов.

Определения, снятые с: http://dofactory.com/Patterns/Patterns.aspx

5 голосов
/ 13 июля 2010
Шаблон

Адаптер используется, когда вы хотите адаптировать интерфейс существующего класса к другому интерфейсу, с которым клиент ожидает работать.Обычно это просто делегирование или перевод метода одного интерфейса в соответствующий метод другого.

Фасад используется, когда вы хотите упростить сложную систему, предоставив более простой наборAPI, с которыми клиент может работать.Он включает в себя преобразование сложного шаблона вызовов API в один вызов API.

Ваш случай звучит так, будто вам нужен фасад, а не адаптер.Реализация только шаблона адаптера не даст вам преимущества упрощения API.В конце концов, не имеет значения, как вы это называете.И эти образцы не являются исключительными.Вы можете смешать оба способа таким образом, чтобы получить максимальную выгоду.

0 голосов
/ 30 августа 2016
Шаблон

Фасад () Объект, обеспечивающий упрощенный интерфейс с большим объемом кода ), подходит для вашего варианта использования.

Контрольный список для использования Facade: (из связанной статьи Википедии)

  1. Для доступа к сложной системе требуется простой интерфейс.
  2. Абстракции и реализации подсистемы* тесно связаны между собой.
  3. Требуется точка входа на каждый уровень многоуровневого программного обеспечения.
  4. Система очень сложна или трудна для понимания.

В связи с дополнительным вопросом SEподробности о фасаде.

Что такое шаблон проектирования фасада?

Хотя оба Фасад и Адаптер являются структурными узораминамерение другое (ответ самитгаура хорошо объяснил часть намерения).

Поскольку вы не конвертируете один интерфейс в другой, адаптер не подходит для вашей цели.

Связанный с SE вопрос:

В чем разница между фасадом и рисунком адаптера?

0 голосов
/ 27 сентября 2010

Фасад имеет дело с интерфейсом, а не с реализацией. Его цель - скрыть внутреннюю сложность за единственным интерфейсом, который выглядит простым снаружи.

0 голосов
/ 13 июля 2010

Разница между Фасадом и Адаптером заключается в основном в намерениях.

Если вы хотите упростить интерфейс, тогда вы смотрите на Фасад. Если вы хотите адаптировать интерфейс так, чтобы его можно было использовать как что-то другое, то это адаптер.

Но на самом деле, в чем проблема, как вы это называете? Мое эмпирическое правило: если вы реализуете существующий интерфейс, вы, вероятно, используете интерфейс адаптера. Если вы создаете новый упрощенный интерфейс - это Фасад.

...