Страница курса Паттерны проектирования

Материал из Вики ИТ мехмата ЮФУ
Версия от 09:12, 18 июля 2014; Admin (обсуждение | вклад) (Необходимые факты из ООП)

Перейти к: навигация, поиск

Материалы к курсу

Литература

  1. Д. Влиссидес, Э.Гамма, Р. Хелм, Р. Джонсон. Приёмы объектно ориентированного проектирования.Паттерны проектирования
  2. Фримен Р., Фримен Л., Сьерра К., Бейтс Б. - Паттерны проектирования
  3. Гранд М. - Шаблоны проектирования в Java
  4. Смит Д. Элементарные шаблоны проектирования (2013)
  5. Стерлинг С., Массен О. Применение шаблонов Java
  6. Обзор паттернов проектирования на citforum.ru
  7. Шпаргалка по шаблонам проектирования на Хабрахабре
  8. Шпаргалка по шаблонам проектирования на itdumka.com.ua

Типы заданий

  • По системе классов нарисовать UML-диаграмму
  • По UML-диаграмме создать систему классов
  • Реализовать задачу с применением данного паттерна и сдать отчет в указанном виде (вид отчета на паттерны разработать)
  • В коде увидеть паттерн
  • Переделать код без паттерна в код с паттерном

Необходимые факты из ООП

  • Нотация UML-диаграмм классов и диаграмм последовательности
  • Указатели на функции (процедурные переменные)
  • Делегирование
  • Наследование
  • Полиморфизм и принцип подстановки
  • Интерфейсы

Ранее известные паттерны

  • Упаковка параметров
  • Делегирование
  • Итератор
  • Выполнение операции для элементов полиморфного контейнера

Каталог основных паттернов

Порождающие паттерны

Абстрактная фабрика

Пример MazeGame

Строитель (Builder)

Пример MazeGame

Фабричный метод

Пример MazeGame

Отложенная инициализация (Lazy initialization)

Пул объектов (Object Pool)

Прототип

Пример MazeGame

Singleton

Графическая система

Структурные паттерны

Адаптер

Адаптирует интерфейс одного класса к другому

Мост (Bridge)

Позволяет менять интерфейс и реализацию независимо.

Пример: множество фигур и множество графических систем.

Компоновщик (Composite)

Объединяет объекты в древовидные структуры. Единообразно трактует простые и составные объекты.

Пример. Графические фигуры - это окружность, квадрат, отрезок и СоставнаяФигура, которая состоит из других фигур, в то же время являясь фигурой.

Декоратор (Обертка, Wrapper)

Динамически добавляет объекту новые свойства.

Пример. В Java - разновидности файловых потоков. К стандартному файловому потоку могут быть добавлены декораторы буферизации, шифрования, архивации и проч. в любых комбинациях.

Декоратор принимает отдекорированный предыдущими декораторами объект и возвращает объект с дополнительной декорацией.

Фасад

Предоставляет простой интерфейс к большой системе, которая обычно представляет множество взаимосвязанных классов.

Приспособленец (Flyweight)

Используется для уменьшения затрат при работе с большим количеством мелких объектов.

Пример. В графическом редакторе не надо хранить каждый символ в виде объекта. Достаточно хранить по одному объекту для каждого из используемых символов кодовой таблицы и в метод рисования передавать контекст рисования (например, строку-столбец). Таким образом, у каждого объекта есть внутреннее состояние (символ, который он представляет) и внешнее (строка-столбец), которое не хранится вместе с объектом, а передается ему как параметр в качестве внешнего контекста.

Заместитель (Proxy)

Заместитель ведет себя точно так же как и основной объект, выполняя при необходимости его инстанцирование.

Паттерны поведения

Цепочка обязанностей (Chain of Responsibility)

Некий запрос должен быть обработан в цепочке взаимосвязанных объектов (список, дерево - движение от листьев к корню). Объект либо обрабатывает запрос, либо передвает по цепочке следующему объекту. Если ни один из объектов не обработал запрос, то может происходить какое-то действие.

Команда

Упаковка действий в объекты с целью сделать откат изменений (Redo), логирование, комбинирование действий.

Посредник (Mediator)

В большой системе с множеством объектов каждый объект может передавать сообщения другому. В результате этого сильно возрастает количество связей между объектами (n^2).

Вместо этого предлагается завести объект-посредник, через который передавать эти сообщения (n связей)

Хранитель (Memento)

Хранитель - это объект, в котором сохраняется состояние другого объекта - хозяина хранителя. Это необходимо для того чтобы хозяин мог записать в хранитель некоторую контрольную точку - своё текущее состояние, а потом вернуться к этому состоянию.

Наблюдатель (Observer)

При изменении состояния одного объекта все зависимые от него объекты (подписчики) оповещаются об обновлении.

Состояние (State)

Позволяет объекту менять своё поведение в зависимости от состояния. Состояние моделируется абстрактным объектом с множеством подобъектов (состояний).

Стратегия

Посетитель (Visitor)