Отношения Adapter с другими паттернами
Адаптер и другие паттерны
- Мост проектируют загодя, чтобы развивать большие части приложения отдельно друг от друга. Адаптер применяется постфактум, чтобы заставить несовместимые классы работать вместе.
- Адаптер меняет интерфейс существующего объекта, а декоратор улучшает другой объект без изменения его интерфейса. Причём декоратор поддерживает рекурсивную вложенность, чего не скажешь об адаптере.
- Адаптер предоставляет классу альтернативный интерфейс, декоратор — расширенный интерфейс. А заместитель предоставляет тот же интерфейс, что и реальный объект.
- Фасад задаёт новый интерфейс, тогда как адаптер повторно использует старый. Адаптер оборачивает только один класс, а фасад — целую подсистему. Кроме того, адаптер позволяет двум существующим интерфейсам работать сообща, вместо того чтобы задать полностью новый.
- Мост, стратегия и состояние (и отчасти адаптер) имеют схожие структуры классов — все они построены на принципе «композиции», то есть делегируют работу другим объектам. Тем не менее, они отличаются друг от друга тем, что решают разные проблемы. Помните, что паттерны — это не только рецепт построения кода определённым образом, но и описание проблем, которые привели к данному решению.
Концептуальный пример
Мы имеем код клиента, ожидающий от объекта определенных качеств (порт Lightning). Также у нас есть другой объект под названием Adaptee (ноутбук на Windows), который предоставляет тот же функционал, но через другой интерфейс (USB-порт).
В такой ситуации нам подойдет адаптер. Что будет делать этот паттерн:
- Реализовать интерфейс, который ожидает клиент (порт Lightning).
- Переводить запрос от клиента к адаптируемому объекту в форме, которую он ожидает. Адаптер принимает коннектор Lightning, после чего переводит его сигналы в формат USB в ноутбуке на Windows.
client.go: клиентский код
computer.go: интерфейс клиента
windows.go: неизвестный сервис
windowsAdapter.go: адаптер
main.go
Пришло время поработать с кодом!
output.txt: результат выполнения
С оригиналом статьи ты можешь ознакомиться по ссылке (может потребоваться VPN).