Для чего нужен паттерн цепочка ответственности

«Для чего нужен паттерн цепочка ответственности» — вопрос из категории Паттерны, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Паттерн Chain of Responsibility позволяет передавать запросы по цепочке обработчиков, пока один из них не обработает запрос. Это помогает избежать жесткой привязки отправителя запроса к получателю и дает возможность динамически менять цепочку обработчиков.

Пример:

abstract class Handler {
    private Handler next;

    public Handler setNext(Handler next) {
        this.next = next;
        return next;
    }

    public abstract void handle(Request request);

    protected void passToNext(Request request) {
        if (next != null) next.handle(request);
    }
}

class AuthHandler extends Handler {
    public void handle(Request request) {
        if (request.isAuthenticated()) passToNext(request);
        else throw new RuntimeException("Not authenticated");
    }
}

class LoggingHandler extends Handler {
    public void handle(Request request) {
        System.out.println("Logging request");
        passToNext(request);
    }
}

Используется в:

  • Middleware в веб-фреймворках
  • Обработке событий
  • Валидации данных
  • Логировании