Skip to content

Adapter

Pandas edited this page Jun 17, 2017 · 1 revision

Назначение

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

Применимость

Применяйте паттерн адаптер, когда:

  • Хотите использовать существующий класс, но его интерфейс не соответствует вашим потребностям;
  • Собираетесь создать повторно используемый класс, который должен взаимодействовать с заранее неизвестными или не связанными с ним классами, имеющими несовместимые интерфейсы;
  • (только для адаптера объектов!) Нужно использовать несколько существующих подклассов, но непрактично адаптировать их интерфейсы путем порождения новых подклассов от каждого. В этом случае адаптер объектов может приспосабливать интерфейс их общего родительского класса.

Структура

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

Участники

  • Target - целевой: определяет зависящий от предметной области интерфейс, которым пользуется Client;
  • Client - клиент: вступает во взаимоотношения с объектами, удовлетворяющими интерфейсу Target;
  • Adaptee - адаптируемый: определяет существующий интерфейс, который нуждается в адаптации;
  • Adapter - адаптер: адаптирует интерфейс Adaptee к интерфейсу Target.

Результаты

Результаты применения адаптеров объектов и классов различны.

Адаптер класса:

  • Адаптирует Adaptee к Target, перепоручая действия конкретному классу Adaptee. Поэтому данный паттерн не будет работать, если мы захотим одновременно адаптировать класс и его подклассы;
  • Позволяет адаптеру Adapter заместить некоторые операции адаптируемого класса Adaptee, так как Adapter есть не что иное, как подкласс Adaptee;
  • Вводит только один новый объект. Чтобы добраться до адаптируемого класса, не нужно никакого дополнительного обращения по указателю.

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

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

Clone this wiki locally