
- •ПАТТЕРНЫ
- •Определение и классификация
- •ПОРОЖДАЮЩИЕ
- •Порождающие паттерны
- •ПАТТЕРН 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
- •– преимущества и недостатки

Паттерн Iterator
Применимость
Используйте паттерн итератор:
•Для доступа к содержимому агрегированных объектов без раскрытия их внутреннего представления;
•Для поддержки нескольких активных обходов одного и того же агрегированного объекта;
•Для предоставления единообразного интерфейса с целью обхода различных агрегированных структур (то есть для поддержки полиморфной итерации).
141

Паттерн Iterator
Мотивация
142

Паттерн Iterator
Мотивация
143

Паттерн Iterator
Структура
144

Паттерн Iterator
Участники
•Iterator - итератор:
•- определяет интерфейс для доступа и обхода элементов;
•Concretelterator - конкретный итератор:
•- реализует интерфейс класса Iterator;
•- следит за текущей позицией при обходе агрегата;
•Aggregate - агрегат:
•- определяет интерфейс для создания объекта-итератора;
•ConcreteAggregate - конкретный агрегат:
•- реализует интерфейс создания итератора и возвращает экземпляр подходящего класса Concretelterator.
145

Паттерн Iterator
Отношения
Concretelterator отслеживает текущий объект в агрегате и может вычислить идущий за ним.
146

Паттерн Iterator
Результаты
У паттерна итератор есть следующие важные особенности:
•Поддерживает различные виды обхода агрегата. Сложные агрегаты можно обходить по-разному.
•Итераторы упрощают интерфейс класса Aggregate.
Наличие интерфейса для обхода в классе Iterator делает излишним дублирование этого интерфейса в классе Aggregate. Тем самым интерфейс агрегата упрощается;
•Одновременно для данного агрегата может быть активно несколько обходов. Итератор следит за инкапсулированным в нем самом состоянием обхода.
147

Паттерн Iterator
Реализация
Существует множество вариантов реализации итератора. Ниже перечислены наиболее употребительные. Решение о том, какой способ выбрать, часто зависит от управляющих структур, поддерживаемых языком программирования. Некоторые языки (например, CLU [LG86]) даже поддерживают данный паттерн напрямую.
•Какой участник управляет итерацией. Важнейший вопрос состоит в том, что управляет итерацией: сам итератор или клиент, который им пользуется.
•Что определяет алгоритм обхода. Алгоритм обхода можно определить не только в итераторе. Его может определить сам агрегат и использовать итератор только для хранения состояния итерации.
148

Паттерн Iterator
Реализация
•Насколько итератор устойчив. Модификация агрегата в то время, как совершается его обход, может оказаться опасной. Если при этом добавляются или удаляются элементы, то не исключено, что некоторый элемент будет посещен дважды или вообще ни разу.
•Дополнительные операции итератора. Минимальный интерфейс класса Iterator состоит из операций First, Next, IsDone и Currentltem.
•Использование полиморфных итераторов в C++. С
полиморфными итераторами связаны определенные накладные расходы.
•Итераторы могут иметь привилегированный доступ. Итератор можно рассматривать как расширение создавший его агрегат.
149

Паттерн Iterator
Реализация
•Итераторы для составных объектов. Реализовать внешние агрегаты для рекурсивно агрегированных структур (таких, например, которые возникают в результате применения паттерна компоновщик) может оказаться затруднительно, поскольку описание положения в структуре иногда охватывает несколько уровней вложенности.
•Пустые итераторы. Пустой итератор Nulllterator - это вырожденный итератор, полезный при обработке граничных условий. По определению, Nulllterator всегда считает, что обход завершен, то есть его операция IsDone неизменно возвращает истину.
150