设计模式-责任链模式:让请求像流水线一样自由流转
🔍 引言:为什么需要责任链模式?
场景痛点:
想象一个请假审批系统:
- 普通员工请假 ≤3天 → 组长审批
- 3天 < 请假 ≤7天 → 经理审批
- 请假 >7天 → CEO审批
如果用传统的if-else实现:
if (days <= 3) {
groupLeader.approve();
} else if (days <=7) {
manager.approve();
} else {
ceo.approve();
}
问题暴露:
- 新增审批层级需要修改原有代码 ❌
- 审批逻辑与业务代码高度耦合 ❌
- 难以动态调整审批流程 ❌
责任链模式的价值:
- 解耦请求与处理:请求像击鼓传花一样在链中传递
- 动态扩展节点:新增处理器只需扩展链条
- 灵活流程控制:支持顺序处理、短路拦截等场景
📚 一、责任链模式核心概念
1.1 定义与本质
官方定义:
- 将请求的发送者和接收者解耦,使多个对象都有机会处理该请求。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
通俗理解:
- 处理器节点:每个节点都像收费站,可选择拦截或放行
- 处理链条:多个节点组成处理流水线
1.2 生活场景类比
场景:网购退货流程
- 处理器接口:退货审核标准
- 具体处理器:
- 客服初审(检查单据完整性)
- 质检审核(验证商品状态)
- 财务处理(退款操作)
- 客户端:用户提交退货申请