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

Метафора

 

Метафорой данного шаблона можно представить какой-нибудь орган гос. власти. Вы приходите в налоговую инспекцию за получением справки, оставляете заявление на её получение. Заявление у вас принимает один специалист, а далее в зависимости от типа документа, перенаправляет его на нужного человека, который специализируется обработкой этих заявок. Таким образом, ваше заявление (сообщение) проходит и обрабатывается в некоторой цепочке специалистов.

 

Назначение

 

Шаблон рекомендован для использования в условиях, когда:

  • в разрабатываемой системе имеется группа объектов, которые могут обрабатывать сообщения определенного типа;
  • все сообщения должны быть обработаны хотя бы одним объектом системы;
  • сообщения в системе обрабатываются по схеме «обработай сам либо перешли другому», то есть одни сообщения обрабатываются на том уровне, где они получены, а другие пересылаются объектам иного уровня.

 

Диаграмма

 

Цепочка ответственности

Цепочка ответственности

 

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

 

Пример

 

В примере выстроена цепочка обработчиков сообщения и в зависимости от приоритета сообщения обработка попадает на того или иного обработчика.

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