Описание тега adapter

Используйте этот тег для вопросов, касающихся шаблона проектирования адаптера, одного из шаблонов структурного проектирования "Банды четырех". Также рассмотрите возможность использования тега [design-patterns] и тега языка программирования, если применимо.

Согласно книге GoF (стр. 139) цель шаблона проектирования адаптера состоит в следующем:

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

Существует две разные версии шаблона проектирования адаптера (стр. 141).

  1. Адаптер класса использует множественное наследование для адаптации одного интерфейса к другому.
  2. Адаптер объекта зависит от композиции объекта.

Существует три сценария, в которых применим шаблон проектирования адаптера (стр. 140).

  1. вы хотите использовать существующий класс, и его интерфейс не соответствует тому, который вам нужен.
  2. вы хотите создать повторно используемый класс, который взаимодействует с несвязанными или непредвиденными классами, то есть с классами, которые не обязательно имеют совместимые интерфейсы.
  3. (только объектный адаптер) вам необходимо использовать несколько существующих подклассов, но нецелесообразно адаптировать их интерфейс, создавая подклассы каждого из них. Адаптер объекта может адаптировать интерфейс своего родительского класса.

В зависимости от используемой версии есть разные последствия применения шаблона проектирования адаптера (стр. 142).

Адаптеры классов и объектов имеют разные компромиссы. Адаптер класса

  • адаптирует Adaptee to Target, закрепляясь за конкретным классом Adaptee. Как следствие, адаптер класса не будет работать, когда мы хотим адаптировать класс и все его подклассы.
  • позволяет адаптеру переопределять некоторые особенности поведения Adaptee, поскольку Adapter является подклассом Adaptee.
  • вводит только один объект, и для доступа к адаптируемому не требуется дополнительных указателей.

Адаптер объекта

  • позволяет одному адаптеру работать со многими адаптерами, то есть с самим адаптируемым объектом и всеми его подклассами (если есть). Адаптер также может добавлять функциональные возможности сразу всем адаптерам.
  • усложняет преодоление поведения адаптируемого. Для этого потребуется создать подкласс Adaptee и сделать так, чтобы адаптер ссылался на подкласс, а не на сам Adaptee.

Подробные сведения о структуре и реализации шаблона проектирования адаптера см. В следующих онлайн-ресурсах.

Обратите внимание, что тег шаблонов проектирования включает этот шаблон, а также другие 22 шаблона из книги GoF. Рассмотрите возможность использования любых из этих тегов в комбинации, если это применимо.