- Цепочка обязанностей
Позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
Пример: Реализация Middleware - классы, которые по цепочке передают HTTP запрос, либо прерывая его, либо обогащая объект Request данными
- Итератор
Даёт возможность последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления.
Пример: В PHP уже есть встроенный интерфейс итератора, который предоставляет удобную интеграцию с циклами foreach
- Снимок
Позволяет делать снимки состояния объектов, не раскрывая подробностей их реализации. Затем снимки можно использовать, чтобы восстановить прошлое состояние объектов.
Пример: Аналог Storage из JS, когда для удобства дебагинга нам надо хранить все состояния скейта стора после каждого изменения
- Состояние
Позволяет объектам менять поведение в зависимости от своего состояния. Извне создаётся впечатление, что изменился класс объекта.
Пример: Хранение части данных из высоконагруженных запросов к БД в стейте
- Шаблонный метод
Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы. Паттерн позволяет подклассам переопределять шаги алгоритма, не меняя его общей структуры.
Пример: Абстрактный класс для работы с похожими API. В нем реализуется публичный метод, где идет вызов шагов, которые надо выполнить чтобы произошло целевое действие с этим АПИ. Непосредственно шаги реализованы с помощью абстрактных методов, которые должны описать дочерние классы
- Команда
Превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
Пример: Загрузка картинок со стороннего сайта, реализованного через очередь. Есть группа классов, которые наследованы от одного абстрактного класса, реализующие загрузку картинок с разными расширениями.
- Посредник
Позволяет уменьшить связанность множества классов между собой, благодаря перемещению этих связей в один класс-посредник.
Пример: Управление уведомлениями в разных частях системы. Реализуется абстрактный класс Mediator с абстрактным методом notify. В сервисах мы можем сослаться на объект конкретного посредника и прокинуть через него событие
- Наблюдатель
Создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.
Пример: Репозиторий по управлению сущностью юзер, которая паблишит события добавления, обновления и удаления, а другие классы (например лагер) слушают их и реализуют свою логику с полученными данными
- Стратегия
Определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
- Посетитель
Позволяет создавать новые операции, не меняя классы объектов, над которыми эти операции могут выполняться.