Материал: ответы на паттерны экзамен

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Название

Цепочка обязанностей (Chain of Responsibility)

Тип

Поведенческий

Назначение

Позволяет избежать жесткой зависимости отправителя запроса от его получателя, при этом объекты-получатели связываются в цепочку, а запрос передается по цепочке, пока какой-то объект его не обработает.

Преимущества

Уменьшает зависимость между клиентом и обработчиками.

Недостатки

Запрос может остаться никем не обработанным.

Реализация

Когда программа должна обрабатывать разнообразные запросы несколькими способами, но заранее неизвестно, какие конкретно запросы будут приходить, и какие обработчики для них понадобятся.

Когда набор объектов, способных обработать запрос, должен задаваться динамически.

Схема

Название

Шаблонный метод (Template Method)

Тип

Поведенческий

Назначение

Определяет структуру алгоритма, перераспределяя ответственность за некоторые его шаги на подклассы. При этом подклассы могут переопределять шаги алгоритма, не меняя его общей структуры.

Преимущества

Облегчает повторное использование кода.

Недостатки

Вы жёстко ограничены скелетом существующего алгоритма.

С ростом количества шагов шаблонный метод становится слишком сложно поддерживать.

Реализация

Когда у вас есть несколько классов, делающих одно и то же с незначительными отличиями. Если вы редактируете один класс, то приходится вносить такие же правки и в остальные классы.

Схема

Порождающий тип.

Название

Абстрактная фабрика (Abstract Factory)

Тип

Порождающий

Назначение

Предоставляет интерфейс для создания множества связанных между собой или независимых объектов, конкретные классы которых неизвестны.

Преимущества

  • Гарантирует сочетаемость создаваемых продуктов.

  • Избавляет клиентский код от привязки к конкретным классам продуктов.

  • Выделяет код производства продуктов в одно место, упрощая поддержку кода.

  • Упрощает добавление новых продуктов в программу.

Недостатки

  • Усложняет код программы из-за введения множества дополнительных классов.

  • Требует наличия всех типов продуктов в каждой вариации.

Реализация

Когда бизнес-логика программы должна работать с разными видами связанных друг с другом продуктов, не завися от конкретных классов продуктов.

Схема

Название

Одиночка (Singleton)

Тип

Порождающий

Назначение

Для выбранного класса обеспечивает выполнение требования единственности экземпляра и предоставления к нему полного доступа.

Преимущества

  • Гарантирует наличие единственного экземпляра класса.

  • Предоставляет к нему глобальную точку доступа.

  • Реализует отложенную инициализацию объекта-одиночки.

Недостатки

  • Нарушает принцип единственной ответственности класса.

  • Маскирует плохой дизайн.

  • Проблемы мультипоточности.

Реализация

Когда в программе должен быть единственный экземпляр какого-то класса, доступный всем клиентам (например, общий доступ к базе данных из разных частей программы).

Схема

Название

Прототип (Prototype)

Тип

Порождающий

Назначение

Описывает виды создаваемых объектов с помощью прототипа, что позволяет создавать новые объекты путем копирования этого прототипа.

Преимущества

  • Позволяет клонировать объекты, не привязываясь к их конкретным классам.

  •  Меньше повторяющегося кода инициализации объектов.

  •  Ускоряет создание объектов.

  •  Альтернатива созданию подклассов для конструирования сложных объектов.

Недостатки

Сложно клонировать составные объекты, имеющие ссылки на другие объекты.

Реализация

Когда ваш код не должен зависеть от классов копируемых объектов.

Когда вы имеете уйму подклассов, которые отличаются начальными значениями полей. Кто-то мог создать все эти классы, чтобы иметь возможность легко порождать объекты с определённой конфигурацией.

Схема

Название

Строитель (Builder)

Тип

Порождающий

Назначение

Отделяет создание сложного объекта от его представления, позволяя использовать один и тот же процесс разработки для создания различный представлений.

Преимущества

  • Позволяет создавать продукты пошагово.

  • Позволяет использовать один и тот же код для создания различных продуктов.

  • Изолирует сложный код сборки продукта от его основной бизнес-логики.

Недостатки

  • Усложняет код программы из-за введения дополнительных классов.

  • Клиент будет привязан к конкретным классам строителей, так как в интерфейсе строителя может не быть метода получения результата.

Реализация

Когда ваш код должен создавать разные представления какого-то объекта. Например, деревянные и железобетонные дома.

Схема

Название

Фабричный метод (Factory Method)

Тип

Порождающий

Назначение

Определяет интерфейс для разработки объектов, при этом объекты данного класса могут быть созданы его подклассами.

Преимущества

  • Избавляет класс от привязки к конкретным классам продуктов.

  • Выделяет код производства продуктов в одно место, упрощая поддержку кода.

  • Упрощает добавление новых продуктов в программу.

Недостатки

Может привести к созданию больших параллельных иерархий классов, так как для каждого класса продукта надо создать свой подкласс создателя.

Реализация

Когда вы хотите экономить системные ресурсы, повторно используя уже созданные объекты, вместо порождения новых.

Когда вы хотите дать возможность пользователям расширять части вашего фреймворка или библиотеки.

Схема

Источник: https://studfile.net/preview/16584794/