Название |
Цепочка обязанностей (Chain of Responsibility) |
Тип |
Поведенческий |
Назначение |
Позволяет избежать жесткой зависимости отправителя запроса от его получателя, при этом объекты-получатели связываются в цепочку, а запрос передается по цепочке, пока какой-то объект его не обработает. |
Преимущества |
Уменьшает зависимость между клиентом и обработчиками. |
Недостатки |
Запрос может остаться никем не обработанным. |
Реализация |
Когда программа должна обрабатывать разнообразные запросы несколькими способами, но заранее неизвестно, какие конкретно запросы будут приходить, и какие обработчики для них понадобятся. Когда набор объектов, способных обработать запрос, должен задаваться динамически. |
Схема |
|
Название |
Шаблонный метод (Template Method) |
Тип |
Поведенческий |
Назначение |
Определяет структуру алгоритма, перераспределяя ответственность за некоторые его шаги на подклассы. При этом подклассы могут переопределять шаги алгоритма, не меняя его общей структуры. |
Преимущества |
Облегчает повторное использование кода. |
Недостатки |
Вы жёстко ограничены скелетом существующего алгоритма. С ростом количества шагов шаблонный метод становится слишком сложно поддерживать. |
Реализация |
Когда у вас есть несколько классов, делающих одно и то же с незначительными отличиями. Если вы редактируете один класс, то приходится вносить такие же правки и в остальные классы. |
Схема |
|
Порождающий тип.
Название |
Абстрактная фабрика (Abstract Factory) |
Тип |
Порождающий |
Назначение |
Предоставляет интерфейс для создания множества связанных между собой или независимых объектов, конкретные классы которых неизвестны. |
Преимущества |
|
Недостатки |
|
Реализация |
Когда бизнес-логика программы должна работать с разными видами связанных друг с другом продуктов, не завися от конкретных классов продуктов. |
Схема |
|
Название |
Одиночка (Singleton) |
Тип |
Порождающий |
Назначение |
Для выбранного класса обеспечивает выполнение требования единственности экземпляра и предоставления к нему полного доступа. |
Преимущества |
|
Недостатки |
|
Реализация |
Когда в программе должен быть единственный экземпляр какого-то класса, доступный всем клиентам (например, общий доступ к базе данных из разных частей программы). |
Схема |
|
Название |
Прототип (Prototype) |
Тип |
Порождающий |
Назначение |
Описывает виды создаваемых объектов с помощью прототипа, что позволяет создавать новые объекты путем копирования этого прототипа. |
Преимущества |
|
Недостатки |
Сложно клонировать составные объекты, имеющие ссылки на другие объекты. |
Реализация |
Когда ваш код не должен зависеть от классов копируемых объектов. Когда вы имеете уйму подклассов, которые отличаются начальными значениями полей. Кто-то мог создать все эти классы, чтобы иметь возможность легко порождать объекты с определённой конфигурацией. |
Схема |
|
Название |
Строитель (Builder) |
Тип |
Порождающий |
Назначение |
Отделяет создание сложного объекта от его представления, позволяя использовать один и тот же процесс разработки для создания различный представлений. |
Преимущества |
|
Недостатки |
|
Реализация |
Когда ваш код должен создавать разные представления какого-то объекта. Например, деревянные и железобетонные дома. |
Схема |
|
Название |
Фабричный метод (Factory Method) |
Тип |
Порождающий |
Назначение |
Определяет интерфейс для разработки объектов, при этом объекты данного класса могут быть созданы его подклассами. |
Преимущества |
|
Недостатки |
Может привести к созданию больших параллельных иерархий классов, так как для каждого класса продукта надо создать свой подкласс создателя. |
Реализация |
Когда вы хотите экономить системные ресурсы, повторно используя уже созданные объекты, вместо порождения новых. Когда вы хотите дать возможность пользователям расширять части вашего фреймворка или библиотеки. |
Схема |
|