Лучший шаблон разработки для использования: адаптер или фасад

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

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

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

6
задан Ravindra babu 30 August 2016 в 19:09
поделиться

4 ответа

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

9
ответ дан 8 December 2019 в 13:43
поделиться

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

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

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

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

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

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

6
ответ дан 8 December 2019 в 13:43
поделиться

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

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

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

5
ответ дан 8 December 2019 в 13:43
поделиться

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

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

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

0
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: