Адаптер
Adapter
Назначение
Паттерн адаптер (Adapter) преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты. Адаптер обеспечивает совместную работу классов с несовместимыми интерфейсами, которая без него была бы невозможна.
Решаемые задачи
Разделение ответственностей
Согласно принципу единственной ответственности (Single Responsibility) один класс должен иметь одну область ответственности. Когда существует сущность на которую возложены 2 или более ответственностей, они разделяются посредством вынесения каждой в адаптер. Ответственности делаются независимыми друг от друга.
Подмена одного интерфейса на другой
Позволяет преобразовывать интерфейс одного класса в интерфейс другого, который ожидают клиенты.
Использование сторонних библиотек
Использовать класс из нестандартной библиотеки следует через адаптер. Делается это для решения проблем совместимости интерфейсов библиотеки и рабочей среды, адаптации кода к новым версиям библиотеки, устранения сильной зависимости кода от библиотеки. Возможность контролировать и модифицировать адаптер делает код более гибким и легким в сопровождении.
Расширение базового интерфейса
UML диаграмма

Преимущества
отделяет и скрывает от клиента подробности преобразования различных интерфейсов
позволяет адаптировать интерфейс к требуемому
позволяет разделить роли сущности
дает возможность независимо развивать различные ответственности сущности
расширение интерфейса
Недостатки
необходимость плодить много классов приводит к увеличению количества времени и памяти,необходимых для исполнения программы
дублирование кода (в различных конкретных адаптерах может требоваться одна и та же реализация методов)
часто адаптер должен иметь доступ к реализации класса
Связь с другими паттернами
Мост: структура паттерна мост аналогична структуре адаптера, но у моста иное назначение. Он отделяет интерфейс от реализации, чтобы то и другое можно было изменять независимо. Адаптер же призван изменить интерфейс существующего объекта.
Фасад: адаптер может использоваться внутри фасада для обеспечения совместимости между подсистемами, имеющими несовместимые интерфейсы.
Заместитель: адаптер может служить в качестве простого заместителя для объекта, предоставляя тот же интерфейс, но с другой реализацией.
Декоратор: оба паттерна имеют схожую структуру, но разные цели. Адаптер изменяет интерфейс объекта, в то время как декоратор расширяет функциональность объекта, не изменяя его интерфейса
Last updated
Was this helpful?