Java设计模式之责任链

责任链模式的核心思想特别像快递分拣流程。比如一个包裹从收货站出发,先经过市级中心判断是否本地件,再流转到省级中心检查是否加急,最后才决定发往全国枢纽。每个环节只关心自己能否处理,不行就甩给下一站,全程不用总控中心操心。对应到代码里,就是把多个处理对象串成一条链,请求像击鼓传花一样挨个路过它们,谁合适谁接手。

先看模式的结构。最核心的是抽象处理器(Handler),它定义两个东西:一个处理请求的方法,比如,还有一个指向下一个处理器的引用。具体处理器(ConcreteHandler)继承这个抽象类,实现自己的业务逻辑。如果当前处理器搞不定,就调用后继者的方法把请求传下去。最后是客户端(Client),它负责把珠子穿成链,并把请求丢到链头。

这模式最大的好处是解耦。比如要做日志系统,咱们可以把Debug、Info、Error三个处理器串起来。Debug只管输出调试信息,Info记录常规操作,Error专抓异常。哪天想加个Warn级别?直接插个新处理器进链里,旧代码毫发无伤。再比如审批流程,组长批完转经理,经理批完转总监,每个节点只需关注自己的审批阈值。

不过它也有坑。万一链太长,请求得像逛迷宫似的绕半天,性能肯定受影响。更头疼的是容易丢包------要是某个处理器忘了调用后继者,请求就半路失踪了。所以用的时候得记得在链尾放个兜底处理器,像垃圾分类里的"其他垃圾"桶,专收没人要的请求。

下面用代码模拟费用报销审批场景。假设基层员工只能批500元以内,经理能批2000元,再往上就得找总监。先定义抽象处理器:

具体处理器继承这个基类,实现不同级别的审批逻辑:

请求对象就是个简单的DTO:

客户端组装责任链并触发请求:

跑起来会发现,300元的单子被员工拦截,1500元的溜到经理那儿,5000元的则一路冲到总监手里。这种设计让审批逻辑分散在各处理器中,哪天要调整金额阈值或增加CFO节点,改起来那叫一个丝滑。

实际项目中,Spring拦截器、Servlet过滤器都是责任链的经典应用。但要注意别滥用,如果处理器之间存在强依赖关系,或者请求必须按固定顺序处理,那还是老老实实用策略模式或模板方法更稳妥。总之,把责任链当成乐高积木,用的好能拼出高扩展性架构,用不好就成了甩锅全家桶。下次遇到多层条件判断时,不妨试试这条链,保准让你直呼真香。

相关推荐
BD_Marathon7 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon7 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
jmxwzy7 小时前
设计模式总结
设计模式
J_liaty1 天前
23种设计模式一代理模式
设计模式·代理模式
苏渡苇1 天前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
短剑重铸之日1 天前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
feasibility.1 天前
AI 编程助手进阶指南:从 Claude Code 到 OpenCode 的工程化经验总结
人工智能·经验分享·设计模式·自动化·agi·skills·opencode
BD_Marathon1 天前
七大设计原则介绍
设计模式
YigAin1 天前
Unity23种设计模式之 享元模式
设计模式·享元模式
范纹杉想快点毕业2 天前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc