Назначение: позволяет избежать привязки отправителя запроса к его получателю, давая шанс обработать запрос нескольким объектам. Связывает объекты-получатели в цепочку и передает запрос вдоль этой цепочки, пока его не обработают.
Общая структура решения.
Типичная структура объектов:
Handler – обработчик: определяет интерфейс для обработки запросов (HandleRequest); может реализовывать связь с преемником (указатель next).
ConcreteHandler – конкретные обработчики: обрабатывают запрос, за который отвечают; имеют доступ к своему преемнику. Если ConcreteHandler способен обработать запрос, то делает это, если не может – то направляет его своему преемнику.
Client – клиент: отправляет запрос некоторому объекту ConcreteHandler в цепочке.
Когда клиент инициирует запрос, этот запрос продвигается по цепочке, пока некоторый объект ConcreteHandler не возьмет на себя ответственность за его обработку.