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

Общая структура решения.

 

 

Типичная структура объектов:

 

 

Handler – обработчик: определяет интерфейс для обработки запросов (HandleRequest); может реализовывать связь с преемником (указатель next).

ConcreteHandler – конкретные обработчики: обрабатывают запрос, за который отвечают; имеют доступ к своему преемнику. Если ConcreteHandler способен обработать запрос, то делает это, если не может – то направляет его своему преемнику.

Client – клиент: отправляет запрос некоторому объекту ConcreteHandler в цепочке.

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