Sobes.tech
Junior — Middle

Pode explicar o princípio de funcionamento do padrão Chain of Responsibility e em que situações é aplicado?

sobes.tech IA

Resposta da IA

Шаблон 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);
        }
    }
}

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