Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_9.ppt
Скачиваний:
46
Добавлен:
16.03.2015
Размер:
1.27 Mб
Скачать

Adapter

21 Название и классификация образца

Адаптер – паттерн, структурирующий классы и объекты

Назначение

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

Известен также под именем Wrapper (обертка)

Бывает адаптер классов и адаптер объектов

Отношения

Клиенты вызывают операции экземпляра адаптера Adapter. В свою очередь адаптер вызывает операции адаптируемого объекта или класса Adaptee, который и выполняет запрос

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Adapter

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

хотите использовать существующий класс, но его интерфейс не соответствует вашим потребностям

собираетесь создать повторно используемый класс, который должен взаимодействовать с заранее неизвестными или не связанными с ним классами, имеющими несовместимые интерфейсы

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

нужно использовать несколько существующих подклассов, но непрактично адаптировать их интерфейсы путем порождения новых подклассов от каждого. В этом случае адаптер объектов может приспосабливать интерфейс их общего родительского класса

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Adapter

23 Adapter (класса): структура

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

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Adapter

24Adapter (класса): особенности

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

Позволяет адаптеру Adapter заместить некоторые операции адаптируемого класса Adaptee, так как Adapter есть не что иное, как подкласс Adaptee

Вводит только один новый объект. Чтобы добраться до адаптируемого класса, не нужно никакого дополнительного

обращения по указателю

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Adapter

25 Adapter (объекта): структура

Адаптер объекта применяет композицию объектов

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Adapter

26Adapter (объекта): особенности

Позволяет одному адаптеру Adapter работать со многими адаптируемыми

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

Затрудняет замещение операций класса Adaptee. Для этого потребуется породить от Adaptee подкласс и заставить Adapter ссылаться на этот подкласс, а не на сам Adaptee

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Adapter

27Участники

Target (Shape) - целевой - определяет зависящий от предметной области интерфейс, которым пользуется Client

Client (DrawingEditor) – клиент - вступает во взаимоотношения с объектами, удовлетворяющими интерфейсу Target

Adaptee (Textview) – адаптируемый - определяет существующий интерфейс, который нуждается в адаптации

Adapter (Text Shape) – адаптер - адаптирует интерфейс Adaptee к интерфейсу Target

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Decorator

28Название и классификация образца

Декоратор образец, структурирующий объекты

Назначение

Динамически добавляет объекту новые обязанности. Является гибкой альтернативой порождению подклассов с целью расширения функциональности

Известен также под именем Wrapper (обертка)

Отношения

Decorator переадресует запросы объекту Component. Может выполнять и дополнительные операции до и после переадресации

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Decorator

29 Decorator: мотивация

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Decorator

30Decorator: применимость

для динамического, прозрачного для клиентов добавления обязанностей объектам

для реализации обязанностей, которые могут быть сняты с объекта

когда расширение путем порождения подклассов по каким-то причинам неудобно или невозможно. Иногда приходится реализовывать много независимых расширений, так что порождение подклассов для поддержки всех возможных комбинаций приведет к комбинаторному росту их числа. В других случаях определение класса может быть скрыто или почему-либо еще недоступно, так что

породить от него подкласс нельзя

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java