- •Образцы проектирования (Design
- •Цели занятия
- •Причины перепроектирования
- •Причины перепроектирования
- •Причины перепроектирования
- •Отличия каркасов от паттернов
- •Singleton
- •Singleton
- •Factory Method
- •Factory Method
- •Factory Method
- •Factory Method
- •Factory Method
- •Factory Method
- •Factory Method
- •Структурные паттерны
- •Структурные паттерны
- •Adapter
- •Adapter
- •Adapter
- •Adapter
- •Adapter
- •Adapter
- •Adapter
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Decorator
- •Proxy
- •Proxy
- •Proxy: мотивация
- •Proxy: мотивация
- •Proxy: мотивация
- •Proxy: мотивация
- •Паттерны поведения
- •Паттерны поведения
- •Паттерны поведения
- •Паттерны поведения
- •Iterator
- •Iterator
- •Iterator
- •Iterator
- •Iterator
- •Iterator
- •Iterator
- •Iterator
- •Iterator
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Observer
- •Системные образцы
- •Системные образцы
- •Литература
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
24• Adapter (класса): особенности
Адаптирует 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
26• Adapter (объекта): особенности
Позволяет одному адаптеру 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
30• Decorator: применимость
для динамического, прозрачного для клиентов добавления обязанностей объектам
для реализации обязанностей, которые могут быть сняты с объекта
когда расширение путем порождения подклассов по каким-то причинам неудобно или невозможно. Иногда приходится реализовывать много независимых расширений, так что порождение подклассов для поддержки всех возможных комбинаций приведет к комбинаторному росту их числа. В других случаях определение класса может быть скрыто или почему-либо еще недоступно, так что
породить от него подкласс нельзя
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |