【设计模式】行为型-责任链模式
文章目录前言一、概念二、核心结构三、Java 代码实现权限 校验 日志 责任链1. 抽象处理器定义链条2. 具体处理器1权限校验3. 具体处理器2参数校验4. 具体处理器3日志记录5. 具体处理器4业务处理6. 客户端组装责任链并调用四、责任链两种模式五、优缺点优点缺点六、应用场景极高频七、责任链 VS 迭代器 VS 命令八、总结前言开发中经常遇到一个请求需要按顺序经过多个处理者层层过滤、校验、流转比如权限校验 → 参数校验 → 限流 → 日志 → 业务处理。如果用if-else或硬编码顺序耦合度极高、扩展极难。责任链模式就是专门解决多级顺序处理、动态编排、灵活插拔的行为型设计模式。一、概念责任链模式Chain of Responsibility Pattern是一种行为型设计模式核心思想将请求的发送者与接收者解耦让多个对象都有机会处理该请求将这些对象连成一条链并沿着这条链传递请求直到有对象处理它为止。简单理解像流水线一样一环接一环每个处理器只关心自己的逻辑处理完可选择继续传递或截断增删处理器不影响其他节点。一句话请求顺着链条走谁能处理谁处理不行就往后传。二、核心结构Handler抽象处理器定义统一处理接口维护下一个处理器next。ConcreteHandler具体处理器实现自己的处理逻辑决定是否继续往下传。Client客户端组装链条发起请求。三、Java 代码实现权限 校验 日志 责任链场景接口请求必须依次经过权限校验参数校验日志记录业务执行1. 抽象处理器定义链条publicabstractclassHandler{protectedHandlernext;publicvoidsetNext(Handlernext){this.nextnext;}publicabstractvoidhandle(Stringrequest);}2. 具体处理器1权限校验publicclassAuthHandlerextendsHandler{Overridepublicvoidhandle(Stringrequest){System.out.println(【权限校验】通过);if(next!null){next.handle(request);}}}3. 具体处理器2参数校验publicclassParamHandlerextendsHandler{Overridepublicvoidhandle(Stringrequest){System.out.println(【参数校验】通过);if(next!null){next.handle(request);}}}4. 具体处理器3日志记录publicclassLogHandlerextendsHandler{Overridepublicvoidhandle(Stringrequest){System.out.println(【日志记录】完成);if(next!null){next.handle(request);}}}5. 具体处理器4业务处理publicclassBizHandlerextendsHandler{Overridepublicvoidhandle(Stringrequest){System.out.println(【执行业务】请求request);}}6. 客户端组装责任链并调用publicclassClient{publicstaticvoidmain(String[]args){// 构建链条HandlerauthnewAuthHandler();HandlerparamnewParamHandler();HandlerlognewLogHandler();HandlerbiznewBizHandler();auth.setNext(param);param.setNext(log);log.setNext(biz);// 发起请求auth.handle(用户请求order/create);}}输出【权限校验】通过 【参数校验】通过 【日志记录】完成 【执行业务】请求用户请求order/create四、责任链两种模式全传递链本文示例每个节点都执行执行完传给下一个。→ 过滤器、拦截器、日志、审计中断链只要一个处理就停止一个节点处理后直接返回不再往后传。→ 异常处理、审批流、优先级匹配五、优缺点优点发送者与接收者完全解耦动态增删、调整顺序符合开闭原则每个处理器单一职责流程清晰像流水线一样直观缺点链过长会性能下降调试麻烦若没设置好next容易请求丢失六、应用场景极高频权限拦截参数校验日志、监控、限流、熔断审批流组长→经理→总监过滤器、拦截器栈异常捕获链经典框架Servlet FilterSpring InterceptorSpring Security 过滤器链MyBatis 插件链Netty ChannelPipeline七、责任链 VS 迭代器 VS 命令责任链请求按顺序流转处理迭代器遍历集合元素命令封装行为为对象可撤销/排队八、总结责任链模式 流水线 层层处理核心请求顺着链走解耦发送与接收结构Handler→next→ 链式调用企业开发最常用行为型模式之一到处都是它的影子