- •« Шаблоны проектирования» (5 курс, 9 семестр, 2011–2012 учебный год)
- •1 Понятие шаблона проектирования. Средства описания шаблонов проектирования.
- •2 История развития шаблонов проектирования. Классификация шаблонов проектирования.
- •12 Структурные шаблоны. Adapter
- •13 Cтруктурные шаблоны. Facade
- •14 Структурные Шаблоны. Bridge
- •15 Структурные Шаблоны. Decorator
- •16 Структурные Шаблоны. Proxy, Composite
- •23 Поведенческие Шаблоны. Command
- •24 Поведенческие Шаблоны. Strategy
- •25 Поведенческие Шаблоны. Observer
- •26 Поведенческие Шаблоны. Iterator
- •27 Поведенческие Шаблоны. Chain Of Responsibility
- •28 Поведенческие Шаблоны. Mediator
- •29 Поведенческие Шаблоны. Template Method
- •30 Архитектурные шаблоны. Классификация
- •31 Архитектурные шаблоны. Клиент-серверные системы
- •32 Архитектурные шаблоны. Многоуровневые системы
- •33 Архитектурные шаблоны. Репозиторий
- •34 Архитектурные шаблоны. Поток данных
- •35 Архитектурные шаблоны. Централизованное управление Вызов - возврат (сценарий транзакции - частный случай).
- •Диспетчер
- •36 Архитектурные шаблоны. Управление, основанное на событиях Передача сообщений
- •Управляемый прерываниями
- •37 Архитектурные шаблоны. Active Record
- •38 Архитектурные шаблоны. Unit of Work
- •39 Архитектурные шаблоны. Lazy Load
- •40 Архитектурные шаблоны. Identity Map
- •41 Архитектурные шаблоны. Data Access Object
- •42 Шаблоны проектирования пользовательского интерфейса. Model-View-Controller
- •43 Шаблоны проектирования пользовательского интерфейса. Document-View
- •44 Шаблоны проектирования пользовательского интерфейса. Model-View-Presenter
- •45 Шаблоны проектирования пользовательского интерфейса. Model-View-ViewModel
- •Назначение
- •Использование
- •Описание
- •46 Антишаблоны
23 Поведенческие Шаблоны. Command
Поведенческие шаблоны (англ. behavioral patterns) — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.
Command
Проблема Необходимо послать объекту запрос, не зная о том, выполнение какой операции запрошено и кто будет получателем.
Решение Инкапсулировать запрос как объект. "Клиент" создает объект "КонкретнаяКоманда", который вызывает операции получателя для выполнения запроса, "Инициатор" отправляет запрос, выполоняя операцию "Команды" Выполнить(). "Команда" объявляет интерфейс для выполнения операции, "КонкретнаяКоманда" определяет связь между объектом "Получатель" и операцией Действие(), и, кроме того, реализует операцию Выполнить() путем вызова соответствующих операций объекта "Получатель". "Клиент" создает экземпляр класса "КонкретнаяКоманда" и устанавливает его получателя, "Инициатор" обращается к команде для выполнения запроса, "Получатель" (любой класс) располагает информацией о способах выполнения операций, необходимых для выполнения запроса.
Преимущества Паттерн "Команда" разрывает связь между объектом, инициирующим операции, и объектом, имеющим информацию о том, как ее выполнить, кроме того создается объект "Команда", который можно расширять и манипулировать им как объектом.
24 Поведенческие Шаблоны. Strategy
Поведенческие шаблоны (англ. behavioral patterns) — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.
Strategy
Проблема Спроектировать изменяемые, но надежные алгоритмы или стратегии.
Решение Определить для каждого алгоритма или стратегии отдельный класс со стандартным интерфейсом.
Пример Обеспечение сложной логики вычисления стоимости товаров с учетом сезонных скидок, скидок постоянным клиентам и т. п. Данная стратегия может изменяться.
Создается несколько классов "Стратегия", каждый из которых содержит один и тот же полиморфный метод "ЦенаРассчитать". В качестве параметров в этот метод передаются данные о продаже. Объект стратегии связывается с контекстным объектом (тем объектом, к которому применяется алгоритм).
25 Поведенческие Шаблоны. Observer
Поведенческие шаблоны (англ. behavioral patterns) — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.
Observer
Проблема Один объект ("Подписчик") должен знать об изменении состояний или некоторых событиях другого объекта. При этом необходимо поддерживать низкий уровень связывания с объектом - "Подписчиком".
Решение Определить интерфейс "Подписки". Объекты - подписчики реализуют этот интерфейс и динамически регистрируются для получении информации о некотором событии. Затем при реализации условленного события оповещаются все объекты - подписчики.
При реализации шаблона «наблюдатель» обычно используются следующие классы.
Observable — интерфейс, определяющий методы для добавления, удаления и оповещения наблюдателей.
Observer — интерфейс, с помощью которого наблюдатель получает оповещение.
ConcreteObservable — конкретный класс, который реализует интерфейс Observable.
ConcreteObserver — конкретный класс, который реализует интерфейс Observer.
Шаблон «наблюдатель» применяется в тех случаях, когда система обладает следующими свойствами:
-существует, как минимум, один объект, рассылающий сообщения
-имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения.
-нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.
Данный шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают получатели с предоставленной им информацией.