Ланцюжок обов’язків — це поведінковий патерн, що дозволяє передавати запит ланцюжком потенційних обробників до тих пір, поки один з них не обробить його.
Позбавляє від жорсткої прив’язки відправника запиту до одержувача, дозволяючи динамічно вибудовувати ланцюг з різних обробників.
Давайте розглянемо патерн Ланцюжок обов’язків на прикладі додатка лікарні. Шпиталь може мати різні приміщення, наприклад:
Приймальне відділення
Доктор
Кімната медикаментів
Касир
Коли пацієнт приходить до лікарні, перш за все він потрапляє у Приймальне відділення, звідти — до Доктора, потім у Кімнату медикаментів, після цього — до Касира, і так далі. Пацієнт проходить ланцюжком приміщень, в якому кожна ланка відправляє його далі відразу після виконання своєї функції.
Цей патерн можна застосовувати у випадках, коли для виконання одного запиту є кілька кандидатів, і коли ви не хочете, щоб клієнт сам вибирав виконавця. Важливо знати, що клієнта необхідно відгородити від виконавців, йому необхідно знати лише про існування першої ланки ланцюга.
Використовуючи приклад лікарні, пацієнт спершу потрапляє в Приймальне відділення. Потім, залежно від його стану, Приймальне відділення відправляє його до наступного виконавця у ланцюзі.