Назад к вопросам
IT One
Junior — Middle
55
Можете объяснить принцип работы шаблона Chain of Responsibility и в каких ситуациях его применяют?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Шаблон Chain of Responsibility (Цепочка обязанностей) позволяет передавать запросы по цепочке обработчиков, пока один из них не обработает запрос. Каждый обработчик решает, может ли он обработать запрос; если нет — передаёт его следующему в цепочке.
Применяется, когда:
- Есть несколько объектов, способных обработать запрос, но заранее неизвестно, кто именно.
- Нужно избежать жёсткой привязки отправителя запроса к получателю.
- Требуется динамически изменять цепочку обработчиков.
Пример: обработка событий в GUI, где событие передаётся от одного компонента к другому, пока кто-то не обработает его.
Пример на Java:
abstract class Handler {
protected Handler next;
public void setNext(Handler next) {
this.next = next;
}
public abstract void handleRequest(String request);
}
class ConcreteHandlerA extends Handler {
public void handleRequest(String request) {
if (request.equals("A")) {
System.out.println("Обработано A");
} else if (next != null) {
next.handleRequest(request);
}
}
}
class ConcreteHandlerB extends Handler {
public void handleRequest(String request) {
if (request.equals("B")) {
System.out.println("Обработано B");
} else if (next != null) {
next.handleRequest(request);
}
}
}
Здесь запрос передаётся по цепочке обработчиков, пока не найдётся подходящий.