Паттерны проектирования - это готовые эффективные шаблоны решения задач, которые часто встречаются в практике программиста.
Группы шаблонов проектирования:
- Порождающие (Creational)
- Структурные (Structural)
- Поведенческие (Behavioral)
Порождающие
Название | Name | Описание |
---|---|---|
Абстрактная фабрика | Abstract Factory | позволяет создавать семейства взаимосвязанных или взаимозависимых объектов, без указания их конкретных классов |
Строитель | Builder | интерфейс для пошагового создания сложных объектов |
Фабричный метод | Factory Method | общий интерфейс для создания объектов в суперклассе, позволяющий подклассам определять тип создаваемого объекта |
Объектный пул | Object Pool | позволяет использовать уже созданный объект вместо создания нового, в ситуации, когда создание нового объекта требует большого количества ресурсов |
Прототип | Prototype | позволяет копировать объекты без необходимости учитывать особенности их реализации |
Одиночка | Singleton | гарантирует, что у класса есть только один экземпляр и предоставляет глобальную точку доступа к нему |
Отложенная инициализация | Lazy initialization | создание объекта, непосредственно перед его использованием |
Мультитон | Multiton | шаблон позволяющий создавать несколько одиночек (Singleton), доступ и управление которыми производится через ассоциативную таблицу, например словарь |
Структурные
Название | Name | Описание |
---|---|---|
Адаптер | Adapter | создание объекта-посредника, который позволит взаимодействовать двум несовместимым объектам |
Мост | Bridge | разделяет класс на отдельные части: внешнюю абстракцию и внутреннюю реализацию |
Компоновщик | Composite | идея состоит в том, что группа объектов (контейнер) и сам объект (содержимое контейнера) обладают тем же набором свойств, что позволяет работать с группой как с целым объектом |
Декоратор | Decorator | добавляет, убирает или изменяет поведение декорированного объекта |
Фасад | Facade | обертка сложной системы, модуля, пакета в простой интерфейс |
Приспособленец | Flyweight | использование совместных ресурсов для похожих объектов, вместо выделения ресурсов для каждого объекта по отдельности |
Прокси | Proxy | создание объекта-подложки для реального объекта, чтобы контролировать обращения к нему, изменять или перенаправлять их |
Поведенческие
Название | Name | Описание |
---|---|---|
Цепочка обязанностей | Chain of responsibility | последовательная передача запросов по списку объектов, которые эти запросы обрабатывают и/или передают дальше по цепочке |
Итератор | Iterator | позволяет последовательно получать объекты из контейнера, не раскрывая особенности реализации контейнера |
Команда | Command | добавляет слой абстракции между действием и объектом, который это действие вызывает, например, кнопка и действие, которое выполняется при нажатии на эту кнопку |
Посредник | Mediator | создание такой структуры, в которой объекты не общаются друг с другом, а используют для этого объект-посредник |
Хранитель | Memento | сохраняет состояние объекта на определенный момент для того, чтобы при необходимости к нему можно было вернуться |
Null Object | Null Object | объект который может использоваться в случае отсутствия нужного объекта или объект по умолчанию |
Наблюдатель | Observer | объект "наблюдающий" за состоянием других объектов, информирующий систему / пользователя про изменения состояния наблюдаемого объекта |
Состояние | State | позволяет изменять поведение объекта в зависимости от его состояния |
Стратегия | Strategy | позволяет объединить несколько алгоритмов в группу, порядок применения алгоритмов может изменяться, благодаря чему достигается гибкость всей системы |
Шаблонный метод | Template method | создание базовых методов и алгоритма их применения в абстрактном родительском классе для того, чтобы определить конкретные методы в дочерних классах |
Посетитель | Visitor | шаблон, позволяющий выполнять операции над другими объектами, без необходимости изменять эти объекты |