2010-07-12 3 views
6

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

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

Не имеет значения, если интерфейс в середине вызывает отдельные задачи в подсистеме через простые вызовы API?

ответ

9

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

6

Это явно похоже на случай с фасадом, целью которого является упрощение, а не фактическая адаптация.

Фасадная Определение:

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

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

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

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

0

Разница между Фасадом и адаптером в основном целью.

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

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

5

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

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

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

-3

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

0

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

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

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

Связанный вопрос SE для получения дополнительной информации о Фасад.

What is Facade Design Pattern?

Несмотря на то, как Фасад и адаптер структурные модели, цель отличается (samitgaur ответ объяснил пристальный часть красиво).

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

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

What is the difference between the Facade and Adapter Pattern?