Skip to content

Отношения Adapter с другими паттернами

Адаптер и другие паттерны

  • Мост проектируют загодя, чтобы развивать большие части приложения отдельно друг от друга. Адаптер применяется постфактум, чтобы заставить несовместимые классы работать вместе.
  • Адаптер меняет интерфейс существующего объекта, а декоратор улучшает другой объект без изменения его интерфейса. Причём декоратор поддерживает рекурсивную вложенность, чего не скажешь об адаптере.
  • Адаптер предоставляет классу альтернативный интерфейс, декоратор — расширенный интерфейс. А заместитель предоставляет тот же интерфейс, что и реальный объект.
  • Фасад задаёт новый интерфейс, тогда как адаптер повторно использует старый. Адаптер оборачивает только один класс, а фасад — целую подсистему. Кроме того, адаптер позволяет двум существующим интерфейсам работать сообща, вместо того чтобы задать полностью новый.
  • Мост, стратегия и состояние (и отчасти  адаптер) имеют схожие структуры классов — все они построены на принципе «композиции», то есть делегируют работу другим объектам. Тем не менее, они отличаются друг от друга тем, что решают разные проблемы. Помните, что паттерны — это не только рецепт построения кода определённым образом, но и описание проблем, которые привели к данному решению.

Концептуальный пример

Мы имеем код клиента, ожидающий от объекта определенных качеств (порт Lightning). Также у нас есть другой объект под названием Adaptee (ноутбук на Windows), который предоставляет тот же функционал, но через другой интерфейс (USB-порт).

В такой ситуации нам подойдет адаптер. Что будет делать этот паттерн:

  • Реализовать интерфейс, который ожидает клиент (порт Lightning).
  • Переводить запрос от клиента к адаптируемому объекту в форме, которую он ожидает. Адаптер принимает коннектор Lightning, после чего переводит его сигналы в формат USB в ноутбуке на Windows.

client.go: клиентский код

computer.go: интерфейс клиента

windows.go: неизвестный сервис

windowsAdapter.go: адаптер

main.go

Пришло время поработать с кодом!

output.txt: результат выполнения

С оригиналом статьи ты можешь ознакомиться по ссылке (может потребоваться VPN).