Типы шаблонов проектирования
Название | Оригинальное название | Описание | Описан в Design Patterns |
---|---|---|---|
Основные шаблоны (Fundamental) | |||
Шаблон делегирования | Delegation pattern | Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту | Н/Д |
Шаблон функционального дизайна | Functional design | Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы | Н/Д |
Неизменяемый объект | Immutable | Объект, который не может быть изменён после своего создания | Н/Д |
Интерфейс | Interface | Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять | Н/Д |
Marker interface | Marker interface | Н/Д | |
Property Container | Property Container | Н/Д | |
Event Channel | Event Channel | Н/Д | |
Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту. | |||
Абстрактная фабрика | Abstract factory | Класс, который представляет собой интерфейс для создания компонентов системы. | Да |
Строитель | Builder | Класс, который представляет собой интерфейс для создания сложного объекта | Да |
Фабричный метод | Factory method | Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанциировать | Да |
Отложенная инициализация | Lazy initialization | Объект, инициализируемый во время первого обращения к нему | Нет |
Пул одиночек | Multiton | Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним | Нет |
Объектный пул | Object pool | Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов | Нет |
Прототип | Prototype | Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор | Да |
Получение ресурса есть инициализация | Resource acquisition is initialization (RAII) | Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта | Нет |
Одиночка | Singleton | Класс, который может иметь только один экземпляр. | Да |
Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу. | |||
Адаптер | Adapter / Wrapper | Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс | Да |
Мост | Bridge | Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо | Да |
Компоновщик | Composite | Объект, который объединяет в себе объекты, подобные ему самому | Да |
Декоратор или Wrapper/Обёртка | Decorator | Класс, расширяющий функционал другого класса, без использования наследования | Да |
Фасад | Facade | Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое | Да |
Единая точка входа | Front Controller | Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы | Нет |
Приспособленец | Flyweight | Это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым | Да |
Заместитель | Proxy | Объект, который является посредником между двумя другими объектами, и который реализовывает/ограничивает доступ к объекту, к которому обращаются через него | Да |
Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость. | |||
Цепочка ответственности | Chain of responsibility | Предназначен для организации в системе уровней ответственности | Да |
Команда, Action, Transaction | Command | Представляет действие. Объект команды заключает в себе само действие и его параметры | Да |
Интерпретатор | Interpreter | Решает часто встречающуюся, но подверженную изменениям, задачу | Да |
Итератор, Cursor | Iterator | Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящий в состав агрегации | Да |
Посредник | Mediator | Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга | Да |
Хранитель, Token | Memento | Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутреннее состояния объекта так, чтобы позднее восстановить его в этом состоянии | Да |
Null object | Предотвращает нулевые указатели, предоставляя объект «по умолчанию» | Нет | |
Наблюдатель, Dependents, Publish-Subscribe, Listener | Observer или Publish/subscribe | Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии | Да |
Слуга | Servant | Используется для обеспечения общей функциональности группе классов | Нет |
Specification | Служит для связывания биснес-логики | Нет | |
Состояние, Objects for States | State | Используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния | Да |
Стратегия | Strategy | Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости | Да |
Шаблонный метод | Template method | Определяюет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом. | Да |
Посетитель | Visitor | Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы. | Да |
Simple Policy | Нет | ||
Event listener | Нет | ||
Single-serving visitor | Single-serving visitor | Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется | Нет |
Hierarchical visitor | Hierarchical visitor | Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной) | Нет |
Частные
Шаблоны параллельного программирования (Concurrency)
Используются для более эффективного написания многопоточных программ, и предоставляет готовые решения проблем синхронизации.Название | Оригинальное название | Описание |
---|---|---|
Active Object | Active object | Служит для отделения потока выполнения метода от потока, в котором он был вызван. Использует шаблоны асинхронный вызов методов и планировщик |
Balking | Balking | Служит для выполнения для действия над объектом только в тогда, когда тот находится в корректном состоянии |
Binding Properties | Комбинирует несколько наблюдателей для обеспечения синхронизации свойств в различных объектах[1] | |
Messaging design pattern (MDP) | Позволяет компонентам и приложениям обмениваться информацией (сообщениями) | |
Блокировка с двойной проверкой | Double-checked locking | Предназначен для уменьшения накладных расходов, связанных с получением блокировки |
Event-based asynchronous | Addresses problems with the Asynchronous pattern that occur in multithreaded programs.[2] | |
Guarded suspension | Guarded suspension | Используется для блокировки выполнения действия над объектом только когда тот находится в корректном состоянии |
Half-Sync/Half-Async | ||
Leaders/followers | ||
Lock | Один поток блокирует ресурс для предотвращения доступа или изменения его другими потоками[3] | |
Monitor Object | Monitor object | Объект, предназначенный для безопасного использования более чем одним потоком |
Reactor | Reactor | Предназначен для синхронной передачи запросов сервису от одного или нескольких источников, |
Read write lock | Read-write lock | Позволяет нескольким потокам одновременно считывать информацию из общего хранилища, но позволяя только одному потоку в момент времени изменять её |
Планировщик | Scheduler | Обеспечивает механизм реализации политики планирования, но при этом не зависящих ни от одной конкретной политики |
Thread pool | Thread pool | Предоставляет пул потоков для обработки заданий, представленных обычно в виде очереди |
Thread-Specific Storage | Thread-specific storage | Служит для предоставления различных глобальных переменных для разных потоков |
Однопоточное выполнение | Single Thread Execution | Препятствует конкурентному вызову метода, тем самым запрещая параллельное выполнение этого метода |
Кооперативный паттерн | Cooperative pattern |
MVC
- Model-View-Controller (MVC) Модель-представление-контроллер
- Model-View-Presenter
- Model-View-View Model
- Presentation-Abstraction-Control
Enterprise
- Business Delegate
- Composite Entity/Составная Сущность
- Composite View
- DAO (Data Access Object) Объект Доступа к Данным
- Dispatcher View
- Front Controller
- Intercepting Filter
- Registry
- Service Activator
- Service Locator/Локатор Службы
- Service to Worker
- Session Facade/Фасад Сессии
- Transfer Object Assembler
- Transfer Object/Объект Перемещения
- Value List Handler/Обработчик Списка Значений
- View Helper
- Unit of Wor
Другие типы шаблонов
Также на сегодняшний день существует ряд других шаблонов:- Carrier Rider Mapper описывают предоставление доступа к хранимой информации
- Аналитические шаблоны описывают основной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программной разработки
- Коммуникационные шаблоны описывают процесс общения между отдельными участниками/сотрудниками организации
- Организационные шаблоны описывают организационную иерархию предприятия/фирмы
- Анти-паттерны (Anti-Design-Patterns) описывают, как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации
См. также
- Анти-паттерн
- Шаблоны J2EE
- Dependency Injection
- UML
- Обобщённое программирование
- Шаблоны C++
- GRASP
- Дизайн манифест
- Ольга Дубина Обзор паттернов проектирования. — Обзор нескольких наиболее значительных монографий, посвященных паттернам проектирования информационных систем. Проверено 5 сентября 2006.
- Каталог шаблонов J2EE
- Один из многих сайтов с шаблонами проектирования на Perl
- Portland Pattern Repository — список шаблонов проектирования на движке вики
- mgrand’s book — сайт с описанием большого количества шаблонов проектирования
- Каталог шаблонов на сайте Hillside.net
- Структурные шаблоны проектирования в XML
- Resign Patterns — проломы проектно-дизориентированного проектирования (пародия на паттерны)
- Eclipse’s Culture of Shipping (англ.) Erich Gamma
- PHP Design Patterns Reference and Examples
- Видео-вебкаст 'Design Patterns' — вебкаст о шаблонах проектирования, 23 шаблона
- Javenue - Объектно-ориентированное проектирование, паттерны проектирования (шаблоны)
src:
Шаблон проектирования