🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page
  • Назначение
  • Решаемые задачи
  • UML диаграмма
  • Преимущества
  • Недостатки
  • Связь с другими паттернами.

Was this helpful?

  1. Паттерны
  2. Поведенческие паттерны

Цепочка обязанностей

Chain of Responsibility

PreviousРеализации на KotlinNextРеализации на С++

Last updated 1 year ago

Was this helpful?

Назначение

Паттерн Цепочка обязанностей (Chain of Responsibility) – это поведенческий шаблон проектирования, который позволяет создать цепочку объектов-обработчиков. Паттерн не требует связи запроса с конкретным объектом и методом, а несет в себе только данные запроса. Каждый обработчик знает, какой объект он может обработать. Если обработчик не может совершить действие над запросом, он передаёт его следующему, пока один из обработчиков не сможет обработать запрос. Используется, когда нужно предоставить различные варианты обработки запросов или когда необходимо динамически изменять порядок обработки.

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

Решаемые задачи

  • Разделение ответственности.

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

  • Избавление от жесткой зависимости объекта и действия над ним.

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

UML диаграмма

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

  1. Возможность легко встроить новый объект обработчик в цепь.

  2. Запрос может обрабатываться несколькими объектами. Каждый обработчик выполняет свою часть работы и может изменять или расширять данные запроса перед передачей его следующему обработчику.

  3. Запрос не связан конкретным объектом или методом.

Недостатки

  1. Если нужный обработчик не был найден, то запрос игнорируется.

  2. Требуется реализация сущности, ответственной за принятие решений о создании, удалении и упорядочивании обработчиков в списке.

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

Связь с другими паттернами.

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

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

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

Компоновщик
узел
Декоратор
Стратегия
UML диаграмма паттерна "Цепочка обязанностей"