Sobes.tech
Назад к вопросам
Junior — Middle
55

Можете объяснить принцип работы шаблона Chain of Responsibility и в каких ситуациях его применяют?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

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);
        }
    }
}

Здесь запрос передаётся по цепочке обработчиков, пока не найдётся подходящий.