Определение

Паттерны проектирования (Design Patterns) — это типичные решения часто встречающихся проблем в проектировании программного обеспечения. Они представляют собой готовые шаблоны, которые можно адаптировать для решения конкретных задач в разработке программного обеспечения. Паттерны не являются готовым кодом, а скорее описанием подхода к решению проблемы, который можно применить в различных ситуациях.

Паттерны проектирования были популяризированы книгой "Design Patterns: Elements of Reusable Object-Oriented Software" (Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес), которая вышла в 1994 году. В этой книге описаны 23 классических паттерна, которые делятся на три категории:

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

Creational Patterns

Абстрактная фабрика (Abstract Factory): Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.

Строитель (Builder): Позволяет создавать сложные объекты пошагово, используя один и тот же процесс строительства.

Фабричный метод (Factory Method): Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать.

Прототип (Prototype): Позволяет копировать объекты, не вдаваясь в подробности их реализации.

Одиночка (Singleton): Гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.

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

Structural Patterns

Адаптер (Adapter): Позволяет объектам с несовместимыми интерфейсами работать вместе.

Мост (Bridge): Разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо.

Компоновщик (Composite): Позволяет сгруппировать объекты в древовидные структуры для работы с ними как с единым объектом.

Декоратор (Decorator): Динамически добавляет объекту новые обязанности, является гибкой альтернативой наследованию.

Фасад (Facade): Предоставляет простой интерфейс к сложной системе классов.

Приспособленец (Flyweight): Экономит память, разделяя состояние между множеством объектов.

Заместитель (Proxy): Позволяет подставлять вместо реальных объектов специальные объекты-заменители.

Поведенческие паттерны

Behavioral Patterns

Цепочка обязанностей (Chain of Responsibility): Позволяет передавать запросы последовательно по цепочке обработчиков.

Команда (Command): Инкапсулирует запрос как объект, позволяя параметризировать клиентов с запросами.

Итератор (Iterator): Предоставляет способ последовательного доступа к элементам составного объекта, не раскрывая его внутреннего представления.

Посредник (Mediator): Упрощает взаимодействие между классами, уменьшая их зависимости друг от друга.

Хранитель (Memento): Позволяет сохранять и восстанавливать состояние объекта.

Наблюдатель (Observer): Определяет зависимость "один ко многим" между объектами так, чтобы при изменении состояния одного объекта все зависящие от него объекты уведомлялись и обновлялись автоматически.

Состояние (State): Позволяет объекту изменять свое поведение в зависимости от внутреннего состояния.

Стратегия (Strategy): озволяет выбирать алгоритм выполнения задачи во время выполнения программы.

Шаблонный метод (Template Method): Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы.

Посетитель (Visitor): Позволяет добавлять новые операции к объектам без изменения их классов.