[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-patterny-chto-takoe-pattern-chain-of-responsibility":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1267,"chto-takoe-pattern-chain-of-responsibility",40,"patterny","Паттерны","🧩","Что такое паттерн Chain of Responsibility?","Chain of Responsibility -- паттерн, передающий запрос по цепочке обработчиков. Каждый обработчик решает, обработать запрос самостоятельно или передать следующему.\n\n> Аналогия из жизни: Chain of Responsibility -- как обработка обращения в техподдержку. Сначала отвечает бот, если не справился -- оператор первой линии, затем специалист, затем инженер. Каждый уровень либо решает проблему, либо передаёт дальше.\n\n\u003Cdetails>\n\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\nabstract class Handler {\n    private Handler next;\n\n    Handler setNext(Handler next) {\n        this.next = next;\n        return next;\n    }\n\n    void handle(Request request) {\n        if (canHandle(request)) {\n            process(request);\n        } else if (next != null) {\n            next.handle(request);\n        }\n    }\n\n    abstract boolean canHandle(Request request);\n    abstract void process(Request request);\n}\n\nclass AuthenticationHandler extends Handler {\n    boolean canHandle(Request req) { return true; } \u002F\u002F всегда проверяет\n    void process(Request req) {\n        if (!req.hasValidToken()) throw new UnauthorizedException();\n    }\n}\n\nclass RateLimitHandler extends Handler {\n    boolean canHandle(Request req) { return true; }\n    void process(Request req) {\n        if (rateLimiter.isExceeded(req.getIp())) throw new TooManyRequestsException();\n    }\n}\n\n\u002F\u002F Построение цепочки\nHandler chain = new AuthenticationHandler();\nchain.setNext(new RateLimitHandler())\n     .setNext(new BusinessLogicHandler());\n\nchain.handle(request);\n```\n\n\u003C\u002Fdetails>\n\n### Примеры в Java-экосистеме\n\n- Servlet Filter -- `FilterChain.doFilter()` -- каждый фильтр вызывает следующий\n- Spring Security FilterChain -- цепочка security-фильтров\n- Spring Interceptors -- `HandlerInterceptor.preHandle()` \u002F `postHandle()`\n- `java.util.logging Handler` -- обработчики логов\n\n### Важное\n\n- Каждый обработчик отвечает за одну задачу (SRP)\n- Порядок обработчиков важен (auth -> rate limit -> validation -> business logic)\n- Обработчик может прервать цепочку или передать управление дальше\n\n### Частые ошибки\n\n- Запрос не обрабатывается никем -- нужен default handler в конце цепочки\n- Слишком длинная цепочка -- усложняет отладку; логируйте прохождение через каждый handler\n\n### Как используется в 2026\n\n- Servlet Filters, Spring Security -- фундаментально построены на Chain of Responsibility\n- Middleware-паттерн в HTTP-фреймворках (аналогично)\n\n> **На собеседовании:** назовите Servlet Filter и Spring Security как примеры Chain of Responsibility -- это покажет понимание реальных фреймворков. Частая ошибка -- описать паттерн теоретически, но не связать с FilterChain из Spring.","","middle",[15],"patterns",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое паттерн Chain of Responsibility? — Gymterview","Chain of Responsibility -- паттерн, передающий запрос по цепочке обработчиков. Каждый обработчик решает, обработать запрос самостоятельно или передать следующем","Chain of Responsibility -- паттерн, передающий запрос по цепочке обработчиков. Каждый обработчик решает, обработать запр",[15,13],"Chain of Responsibility -- паттерн, передающий запрос по цепочке обработчиков. Каждый обработчик решает, обработать запрос самостоятельно или передать следующему.",true]