-
Notifications
You must be signed in to change notification settings - Fork 3
Adapter
Pandas edited this page Jun 17, 2017
·
1 revision
Преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты. Адаптер обеспечивает совместную работу классов с несовместимыми интерфейсами, которая без него была бы невозможна.
Применяйте паттерн адаптер, когда:
- Хотите использовать существующий класс, но его интерфейс не соответствует вашим потребностям;
- Собираетесь создать повторно используемый класс, который должен взаимодействовать с заранее неизвестными или не связанными с ним классами, имеющими несовместимые интерфейсы;
- (только для адаптера объектов!) Нужно использовать несколько существующих подклассов, но непрактично адаптировать их интерфейсы путем порождения новых подклассов от каждого. В этом случае адаптер объектов может приспосабливать интерфейс их общего родительского класса.
Адаптер класса использует множественное наследование для адаптации одного интерфейса к другому.
- Target - целевой: определяет зависящий от предметной области интерфейс, которым пользуется Client;
- Client - клиент: вступает во взаимоотношения с объектами, удовлетворяющими интерфейсу Target;
- Adaptee - адаптируемый: определяет существующий интерфейс, который нуждается в адаптации;
- Adapter - адаптер: адаптирует интерфейс Adaptee к интерфейсу Target.
Результаты применения адаптеров объектов и классов различны.
Адаптер класса:
- Адаптирует Adaptee к Target, перепоручая действия конкретному классу Adaptee. Поэтому данный паттерн не будет работать, если мы захотим одновременно адаптировать класс и его подклассы;
- Позволяет адаптеру Adapter заместить некоторые операции адаптируемого класса Adaptee, так как Adapter есть не что иное, как подкласс Adaptee;
- Вводит только один новый объект. Чтобы добраться до адаптируемого класса, не нужно никакого дополнительного обращения по указателю.
Адаптер объектов:
- Позволяет одному адаптеру Adapter работать со многим адаптируемыми объектами Adaptee, то есть с самим Adaptee и его подклассами (если таковые имеются). Адаптер может добавить новую функциональность сразу всем адаптируемым объектам;
- Затрудняет замещение операций класса Adaptee. Для этого потребуется породить от Adaptee подкласс и заставить Adapter ссылаться на этот подкласс, а не на сам Adaptee.
