middle
Что такое паттерн Chain of Responsibility?
Chain of Responsibility – паттерн, передающий запрос по цепочке обработчиков. Каждый обработчик решает, обработать запрос самостоятельно или передать следующему.
Аналогия из жизни: Chain of Responsibility – как обработка обращения в техподдержку. Сначала отвечает бот, если не справился – оператор первой линии, затем специалист, затем инженер. Каждый уровень либо решает проблему, либо передаёт дальше.
Пример кода
abstract class Handler {
private Handler next;
Handler setNext(Handler next) {
this.next = next;
return next;
}
void handle(Request request) {
if (canHandle(request)) {
process(request);
} else if (next != null) {
next.handle(request);
}
}
abstract boolean canHandle(Request request);
abstract void process(Request request);
}
class AuthenticationHandler extends Handler {
boolean canHandle(Request req) { return true; } // всегда проверяет
void process(Request req) {
if (!req.hasValidToken()) throw new UnauthorizedException();
}
}
class RateLimitHandler extends Handler {
boolean canHandle(Request req) { return true; }
void process(Request req) {
if (rateLimiter.isExceeded(req.getIp())) throw new TooManyRequestsException();
}
}
// Построение цепочки
Handler chain = new AuthenticationHandler();
chain.setNext(new RateLimitHandler())
.setNext(new BusinessLogicHandler());
chain.handle(request);
Примеры в Java-экосистеме
- Servlet Filter –
FilterChain.doFilter()– каждый фильтр вызывает следующий - Spring Security FilterChain – цепочка security-фильтров
- Spring Interceptors –
HandlerInterceptor.preHandle()/postHandle() java.util.logging Handler– обработчики логов
Важное
- Каждый обработчик отвечает за одну задачу (SRP)
- Порядок обработчиков важен (auth -> rate limit -> validation -> business logic)
- Обработчик может прервать цепочку или передать управление дальше
Частые ошибки
- Запрос не обрабатывается никем – нужен default handler в конце цепочки
- Слишком длинная цепочка – усложняет отладку; логируйте прохождение через каждый handler
Как используется в 2026
- Servlet Filters, Spring Security – фундаментально построены на Chain of Responsibility
- Middleware-паттерн в HTTP-фреймворках (аналогично)
На собеседовании: назовите Servlet Filter и Spring Security как примеры Chain of Responsibility – это покажет понимание реальных фреймворков. Частая ошибка – описать паттерн теоретически, но не связать с FilterChain из Spring.