-
Notifications
You must be signed in to change notification settings - Fork 3
Chain of Responsibility
Pandas edited this page Jun 18, 2017
·
1 revision
Позволяет избежать привязки отправителя запроса к его получателю, давая шанс обработать запрос нескольким объектам. Связывает объекты-получатели в цепочку и передает запрос вдоль этой цепочки, пока его не обработают.
Используйте цепочку обязанностей, когда:
- Есть более одного объекта, способного обработать запрос, причем настоящий обработчик заранее неизвестен и должен быть найден автоматически;
- Вы хотите отправить запрос одному из нескольких объектов, не указывая явно, какому именно;
- Набор объектов, способных обработать запрос, должен задаваться динамически.
- Handler - обработчик: определяет интерфейс для обработки запросов; (необязательно) реализует связь с преемником;
- ConcreteHandler - конкретный обработчик: обрабатывает запрос, за который отвечает; имеет доступ к своему преемнику; если ConcreteHandler способен обработать запрос, то так и делает, если не может, то направляет его - его своему преемнику;
- Client - клиент: отправляет запрос некоторому объекту ConcreteHandler в цепочке.
Паттерн цепочка обязанностей имеет следующие достоинства и недостатки:
- Ослабление связанности. Этот паттерн освобождает объект от необходимости «знать», кто конкретно обработает его запрос. Отправителю и получателю ничего неизвестно друг о друге, а включенному в цепочку объекту - о структуре цепочки. Таким образом, цепочка обязанностей помогает упростить взаимосвязи
- Дополнительная гибкость при распределении обязанностей между объектами.
- Получение не гарантировано. Поскольку у запроса нет явного получателя, то нет и гарантий, что он вообще будет обработан.