Java设计模式之责任链

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

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

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

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

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

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

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

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

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

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

相关推荐
GISer_Jing1 天前
AI:多智能体协作与记忆管理
人工智能·设计模式·aigc
雨中飘荡的记忆1 天前
责任链模式实战应用:从理论到生产实践
设计模式
沛沛老爹1 天前
Web开发者进阶AI:Agent技能设计模式之迭代分析与上下文聚合实战
前端·人工智能·设计模式
Geoking.1 天前
【设计模式】装饰者模式详解
设计模式·装饰器模式
vx-bot5556661 天前
企业微信接口在自动化工作流中的关键角色与设计模式
设计模式·自动化·企业微信
Yu_Lijing1 天前
基于C++的《Head First设计模式》笔记——工厂模式
c++·笔记·设计模式
HL_风神2 天前
设计原则之迪米特
c++·学习·设计模式
HL_风神2 天前
设计原则之合成复用
c++·学习·设计模式
Aeside12 天前
揭秘 Nginx 百万并发基石:Reactor 架构与 Epoll 底层原理
后端·设计模式
帅气的你2 天前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式