Паттерны проектирования (Design patterns)

Материал из Поле цифровой дидактики


Описание повторяемая архитектурная конструкция в сфере проектирования программного обеспечения, предлагающая решение часто возникающей проблемы
Область знаний Информатика
Авторы Кристофер Вольфганг Александер (Christopher Wolfgang Alexander), Эрих Гамма (Erich Gamma), Ричард Хелм (Richard Helm), Ральф Джонсон (Ralph Jonson), Джон Влиссидес (John Vlissides)
Поясняющее видео
Близкие понятия
Среды и средства для освоения понятия Книга "Design Patterns: Elements of Reusable Object-Oriented Software"

Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код; это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.

Плюсы

  • Снижение сложности разработки
  • Упрощение коммуникации между разработчиками
  • Унификация

Минусы

  • Слепое следование может привести к усложнению программы
  • Возможное использование без особых оснований

Основные шаблоны

Шаблоны проектирования можно разделить на три основные группы

Порождающие

Абстрагируют процесс создания. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов

  • Абстрактная фабрика - класс, который представляет собой интерфейс для создания компонентов системы
  • Строитель - класс, который представляет собой интерфейс для создания сложного объекта
  • Фабричный метод - определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс создавать
  • Прототип - определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор
  • Одиночка - класс, который может иметь только один экземпляр
Структурные

Определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу

  • Адаптер - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс
  • Мост - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо
  • Компоновщик - объект, который объединяет в себе объекты, подобные ему самому
  • Декоратор - класс, расширяющий функциональность другого класса без использования наследования
  • Фасад - объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое
  • Легковес - объект, представляющий себя как уникальный экземпляр в разных местах программы, но фактически не являющийся таковым
  • Заместитель - объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него
Поведенческие

Определяют взаимодействие между объектами, увеличивая таким образом гибкость программы

  • Цепочка обязанностей - предназначен для организации в системе уровней ответственности
  • Команда - представляет действие. Объект команды заключает в себе само действие и его параметры
  • Интерпретатор - решает часто встречающуюся, но подверженную изменениям, задачу
  • Итератор - представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации
  • Посредник - обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга
  • Хранитель - позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях
  • Наблюдатель - определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии
  • Состояние - используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния
  • Стратегия - предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости
  • Шаблонный метод - определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом
  • Посетитель - описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы