Паттерны проектирования (Design patterns)
Описание | повторяемая архитектурная конструкция в сфере проектирования программного обеспечения, предлагающая решение часто возникающей проблемы |
---|---|
Область знаний | Информатика |
Авторы | Кристофер Вольфганг Александер (Christopher Wolfgang Alexander), Эрих Гамма (Erich Gamma), Ричард Хелм (Richard Helm), Ральф Джонсон (Ralph Jonson), Джон Влиссидес (John Vlissides) |
Поясняющее видео | |
Близкие понятия | |
Среды и средства для освоения понятия | Книга "Design Patterns: Elements of Reusable Object-Oriented Software" |
Обычно шаблон (паттерн) не является законченным образцом, который может быть прямо преобразован в код; это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.
Плюсы
- Снижение сложности разработки
- Упрощение коммуникации между разработчиками
- Унификация
Минусы
- Слепое следование может привести к усложнению программы
- Возможное использование без особых оснований
Основные шаблоны
Шаблоны проектирования можно разделить на три основные группы
Порождающие
Абстрагируют процесс создания. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов
- Абстрактная фабрика - класс, который представляет собой интерфейс для создания компонентов системы
- Строитель - класс, который представляет собой интерфейс для создания сложного объекта
- Фабричный метод - определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс создавать
- Прототип - определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор
- Одиночка - класс, который может иметь только один экземпляр
Структурные
Определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу
- Адаптер - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс
- Мост - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо
- Компоновщик - объект, который объединяет в себе объекты, подобные ему самому
- Декоратор - класс, расширяющий функциональность другого класса без использования наследования
- Фасад - объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое
- Легковес - объект, представляющий себя как уникальный экземпляр в разных местах программы, но фактически не являющийся таковым
- Заместитель - объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него
Поведенческие
Определяют взаимодействие между объектами, увеличивая таким образом гибкость программы
- Цепочка обязанностей - предназначен для организации в системе уровней ответственности
- Команда - представляет действие. Объект команды заключает в себе само действие и его параметры
- Интерпретатор - решает часто встречающуюся, но подверженную изменениям, задачу
- Итератор - представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации
- Посредник - обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга
- Хранитель - позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях
- Наблюдатель - определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии
- Состояние - используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния
- Стратегия - предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости
- Шаблонный метод - определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом
- Посетитель - описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы