- •ПАТТЕРНЫ
- •Определение и классификация
- •ПОРОЖДАЮЩИЕ
- •Порождающие паттерны
- •ПАТТЕРН SINGLETON
- •Singleton
- •Singleton - проблема
- •Singleton - решение
- •Singleton - структура
- •Singleton - участники
- •Паттерн Singleton
- •Singleton – преимущества и недостатки
- •ПАТТЕРН PROTOTYPE
- •Prototype
- •Prototype - проблема
- •Prototype – решение
- •Prototype – структура
- •Prototype - участники
- •Prototype – преимущества и недостатки
- •ПАТТЕРН FACTORY METHOD
- •Factory Method
- •Factory Method - проблема
- •Factory Method - решение
- •Factory Method - решение
- •Factory Method - структура
- •Factory Method - участники
- •Factory Method – преимущества и недостатки
- •ПАТТЕРН ABSTRACT FACTORY
- •Abstract Factory
- •Abstract Factory - проблема
- •Abstract Factory - решение
- •Abstract Factory - структура
- •Abstract Factory - участники
- •Abstract Factory – преимущества и недостатки
- •ПАТТЕРН BUILDER
- •Builder
- •Builder - проблема
- •Builder - решение
- •Builder - решение
- •Builder - решение
- •Builder - структура
- •Паттерн Builder - участники
- •Builder
- •Builder – преимущества и недостатки
- •СТРУКТУРНЫЕ
- •Структурные паттерны
- •ПАТТЕРН ADAPTER
- •Adapter
- •Adapter - проблема
- •Adapter - решение
- •Adapter - структура
- •Adapter - участники
- •Adapter - пример
- •Adapter – достоинства и недостатки
- •ПАТТЕРН BRIDGE
- •Bridge
- •Bridge - проблема
- •Bridge - решение
- •Bridge - структура
- •Bridge - участники
- •Bridge – преимущества и недостатки
- •ПАТТЕРН COMPOSITE
- •Composite
- •Composite – проблема и решение
- •Composite – аналогия из жизни
- •Composite – структура
- •Composite - участники
- •Composite - пример
- •Composite – преимущества и недостатки
- •ПАТТЕРН DECORATOR
- •Decorator
- •Decorator - проблема
- •Decorator – проблема и решение
- •Decorator – решение
- •Decorator – аналогия из жизни
- •Decorator – структура
- •Decorator - участники
- •Decorator – пример
- •Decorator – преимущества и недостатки
- •ПАТТЕРН FACADE
- •Facade
- •Facade – проблема и решение
- •Facade – аналогия из жизни
- •Façade - структура
- •Facade - участники
- •Facade - пример
- •Facade – преимущества и недостатки
- •ПАТТЕРН FLYWEIGHT
- •Flyweight
- •Flyweight - проблема
- •Flyweight - решение
- •Flyweight - решение
- •Flyweight – структура
- •Flyweight - участники
- •Flyweight – пример
- •Flyweight – преимущества и недостатки
- •ПАТТЕРН PROXY
- •Proxy
- •Proxy - проблема
- •Proxy - решение
- •Proxy – аналогия из жизни
- •Proxy – структура
- •Паттерн Proxy - участники
- •Паттерн Proxy - участники
- •Proxy - пример
- •Proxy – преимущества и недостатки
- •ПАТТЕРНЫ
- •Паттерны поведения
- •ПАТТЕРН CHAIN
- •Chain of Responsibility
- •Chain of Responsibility - проблема
- •Chain of Responsibility - решение
- •Chain of Responsibility - решение
- •Chain of Responsibility – аналогия из жизни
- •Chain of Responsibility – структура
- •Chain of Responsibility -
- •Chain of Responsibility - пример
- •Chain of Responsibility - пример
- •Chain of Responsibility –
- •ПАТТЕРН COMMAND
- •Command
- •Command – проблема
- •Command – проблема
- •Command - участники
- •Command – преимущества и недостатки
- •ПАТТЕРН INTERPRETER
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •Паттерн Interpreter
- •– преимущества и недостатки
- •ПАТТЕРН ITERATOR
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •Паттерн Iterator
- •– преимущества и недостатки
- •ПАТТЕРН MEDIATOR
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •Паттерн Mediator
- •– преимущества и недостатки
- •ПАТТЕРН MEMENTO
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •Паттерн Memento
- •– преимущества и недостатки
- •ПАТТЕРН OBSERVER
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •Паттерн Observer
- •– преимущества и недостатки
- •ПАТТЕРН STATE
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •Паттерн State
- •– преимущества и недостатки
- •ПАТТЕРН STRATEGY
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •Паттерн Strategy
- •– преимущества и недостатки
- •ПАТТЕРН TEMPLATE METHOD
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •Паттерн Template Method
- •– преимущества и недостатки
- •ПАТТЕРН VISITOR
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •Паттерн Visitor
- •– преимущества и недостатки
Паттерн Observer
Результаты
•Абстрактная связанность субъекта и наблюдателя.
Субъект имеет информацию лишь о том, что у него есть ряд наблюдателей, каждый из которых подчиняется простому интерфейсу абстрактного класса Observer.
•Поддержка широковещательных коммуникаций. В
отличие от обычного запроса для уведомления, посылаемого субъектом, не нужно задавать определенного получателя.
•Неожиданные обновления. Поскольку наблюдатели не располагают информацией друг о друге, им неизвестно и о том, во что обходится изменение субъекта.
191
Паттерн Observer
Реализация
•Отображение субъектов на наблюдателей. С помощью этого простейшего способа субъект может отследить всех наблюдателей, которым он должен посылать уведомления, то есть хранить на них явные ссылки.
•Наблюдение более чем за одним субъектом. Иногда наблюдатель может зависеть более чем от одного субъекта.
•Кто инициирует обновление. Чтобы сохранить согласованность, субъект и его наблюдатели полагаются на механизм уведомлений.
•Висячие ссылки на удаленные субъекты. Удаление субъекта не должно приводить к появлению висячих ссылок у наблюдателей.
192
Паттерн Observer
Реализация
•Гарантии непротиворечивости состояния субъекта перед отправкой уведомления. Важно быть уверенным, что перед вызовом операции Notify состояние субъекта непротиворечиво, поскольку в процессе обновления собственного состояния наблюдатели будут опрашивать состояние субъекта.
•Как избежать зависимости протокола обновления от наблюдателя: модели вытягивания и проталкивания. В реализациях паттерна наблюдатель субъект довольно часто транслирует всем подписчикам дополнительную информацию о характере изменения.
•Явное специфицирование представляющих интерес модификаций.
Эффективность обновления можно повысить, расширив интерфейс регистрации субъекта, то есть предоставив возможность при регистрации наблюдателя указать, какие события его интересуют.
193
Паттерн Observer
Реализация
•Инкапсуляция сложной семантики обновления. Если отношения зависимости между субъектами и наблюдателями становятся особенно сложными, то может потребоваться объект, инкапсулирующий эти отношения.
•Комбинирование классов Subject и Observer. В
библиотеках классов, которые написаны на языках, не поддерживающих множественного наследования (например, на Smalltalk), обычно не определяются отдельные классы Subject и Observer.
194
Паттерн Observer
Родственные паттерны
•Посредник: класс ChangeManager действует как посредник между субъектами и наблюдателями, инкапсулируя сложную семантику обновления.
•Одиночка: класс ChangeManager может воспользоваться паттерном одиночка, чтобы гарантировать уникальность и глобальную доступность менеджера изменений.
195
– преимущества и недостатки
Преимущества Недостатки
ПАТТЕРН STATE
Паттерн State
Название и классификация паттерна
• Состояние - паттерн поведения объектов.
Назначение
•Позволяет объекту варьировать свое поведение в зависимости от внутреннего состояния. Извне создается впечатление, что изменился класс объекта.
198
Паттерн State
Применимость
Используйте паттерн состояние в следующих случаях:
•Когда поведение объекта зависит от его состояния и должно изменяться во время выполнения;
•Когда в коде операций встречаются состоящие из многих ветвей условные операторы, в которых выбор ветви зависит от состояния. Обычно в таком случае состояние представлено перечисляемыми константами.
199
Паттерн State
Мотивация
200
