- Шаблоны проектирования
- Порождающие (Creational)
- Абстрактная фабрика (Abstract factory)
- Определяется общий интерфейс, по которому создаются разные реализации.
- Строитель (Builder)
- Описывается абстрактный класс, для которого создаются разные реализации.
- Фабричный метод (Factory method )
- Определяется общий интерфейс, по которому создаются разные реализации.
- Прототип (Prototype)
- Создание через клонирование.
- Абстрактная фабрика (Abstract factory)
- Структурные (Structural)
- Адаптер (Adapter)
- Переходник, преобразователь.
- Мост (Bridge)
- Определяется общий интерфейс, для моделей и для их представления. В результате любую модель можно представить в любом виде.
- Компоновщик (Composite)
- Древовидный контрол.
- Декоратор (Decorator)
- Обёртка для класса/компонента, которая расширяет функциональность.
- Фасад (Facade)
- Обёртка над сложным интерфейсом. Умный адаптер.
- Приспособленец (Flyweight)
- Map-кэш. Разделение памяти.
- Заместитель (Proxy)
- Перехват методов.
- Адаптер (Adapter)
- Поведенческие (Behavioral)
- Цепочка обязанностей (Chain of responsibility)
- Обработка сообщения по цепочке, похоже на Promise.then().
- Команда (Command)
- Прослойка между клиентом и исполнителем, для учёта команд.
- Интерпретатор (Interpreter)
- Интерпретатор языка
- Итератор (Iterator)
- Метод next() (children() для дерева)
- Посредник (Mediator)
- Роутер сообщений. Получает сообщение и определеяет, кому его отправить.
- Хранитель (Memento)
- Методы для сохранения и восстановления своего состояния, и отдельный класс для хранения состояний.
- Наблюдатель (Observer)
- Сохраняет подписчиков на событие в массив, при наступлении события, рассылает подписчикам уведомление
- Состояние (State)
- Конечный автомат. Вместо условий в каждом методе, отдельный класс для каждого состояния.
- Стратегия (Strategy)
- Набор алгоритмов для решения одной задачи разными способами.
- Шаблонный метод
- Описание общих шагов алгоритма. Реализация шагов на конкретных классах.
- Цепочка обязанностей (Chain of responsibility)
- Порождающие (Creational)
- GRASP
- Информационный эксперт (Information Expert)
- Информация должна обрабатываться там, где она содержится.
- Создатель (Creator)
- Создавать экземпляры класса должен класс, которому они нужны. То же, что и Информационный эксперт, только про создание.
- Контроллер (Controller)
- Обработка событий от пользователя или внешних событий.
- Высокая связность / Слабое зацепление (Low Coupling / High Cohesion)
- Нужно группировать методы так, чтобы связанные между собой методы были в одном классе.
- Полиморфизм (Polymorphism)
- Различные варианты поведения системы при необходимости оформляем в виде полиморфных вызовов.
- Чистое изготовление (Pure Fabrication)
- Не стесняемся создавать классы, не имеющие аналог в предметной области, если это необходимо для соблюдения Low Coupling и High Cohesion.
- Перенаправление (Indirection)
- В архитектуре Model-View-Controller, контроллер ослабляет зацепление модели с её представлением.
- Устойчивость к изменениям (Protected Variations)
- Работа только через интерфейс.
- Информационный эксперт (Information Expert)