Цепочка обязанностей — это поведенческий паттерн, позволяющий передавать запрос по цепочке потенциальных обработчиков, пока один из них не обработает запрос.
Избавляет от жёсткой привязки отправителя запроса к его получателю, позволяя выстраивать цепь из различных обработчиков динамически.
Давайте рассмотрим паттерн Цепочка обязанностей на примере приложения больницы. Госпиталь может иметь разные помещения, например:
Приемное отделение
Доктор
Комната медикаментов
Кассир
Когда пациент прибывает в больницу, первым делом он попадает в Приемное отделение, оттуда – к Доктору, затем в Комнату медикаментов, после этого – к Кассиру, и так далее. Пациент проходит по цепочке помещений, в которой каждое отправляет его по ней дальше сразу после выполнения своей функции.
Этот паттерн можно применять в случаях, когда для выполнения одного запроса есть несколько кандидатов, и когда вы не хотите, чтобы клиент сам выбирал исполнителя. Важно знать, что клиента необходимо оградить от исполнителей, ему необходимо знать лишь о существовании первого звена цепи.
Используя пример больницы, пациент сперва попадает в Приемное отделение. Затем, зависимо от его состояния, Приемное отделение отправляет его к следующему исполнителю в цепи.