设计模式之责任链模式详解
创作时间:
作者:
@小白创作中心
设计模式之责任链模式详解
引用
1
来源
1.
https://www.cnblogs.com/jilodream/p/18374509
责任链模式是面向对象设计模式中的一种行为模式,通过将请求处理者串联成链表结构,实现请求的逐级处理。本文通过一个新员工入职流程的案例,详细介绍了责任链模式的核心思想、应用场景以及具体实现方法。
责任链模式简介
责任链模式(Chain of Responsibility),顾名思义,就是将每一个处理请求的处理器组合成一个链表,链表中的每个节点(执行器)都有机会处理发送的请求。其大致结构如下:
案例分析:新员工入职流程
假设某公司新员工入职流程分为三步:
- 签订劳动合同
- 员工信息入库
- 下发工卡
按照责任链模式设计,类图如下:
代码实现
处理器接口
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public interface IHandler {
boolean handle(Employee employee);
}
合同处理器
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public class CardHandler implements IHandler{
@Override
public boolean handle(Employee employee) {
System.out.println("制作工牌:工号"+employee.getId()+" 姓名:"+employee.getName());
return true;
}
}
协议处理器
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public class ContractHandler implements IHandler {
@Override
public boolean handle(Employee employee) {
System.out.println("签订合同:" + employee);
return true;
}
}
系统流程处理器
package com.example.demo.learn.pattern.behavior.responsibilitychain;
import java.util.Date;
public class SystemHandler implements IHandler {
@Override
public boolean handle(Employee employee) {
long id = new Date().getTime();
employee.setId(id);
System.out.println("员工信息登入到系统中: " + employee);
return true;
}
}
员工类:业务实体
package com.example.demo.learn.pattern.behavior.responsibilitychain;
import lombok.Data;
@Data
public class Employee {
private Long id;
private String name;
}
主类:责任链的编排和请求调用
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public class PatternMain {
public static void main(String[] args) {
ContractHandler contractHandler = new ContractHandler();
SystemHandler systemHandler = new SystemHandler();
CardHandler cardHandler = new CardHandler();
EntryChain entry = new EntryChain(contractHandler, systemHandler, cardHandler);
String name = "小z";
boolean result = entry.process(name);
if (result) {
System.out.println(name + "的入职流程已经处理完");
}
}
}
执行效果如下:
Connected to the target VM, address: '127.0.0.1:63269', transport: 'socket'
签订合同:Employee(id=null, name=小z)
员工信息入库: Employee(id=1724316937102, name=小z)
制作工牌:工号1724316937102 姓名:小z
小z的入职流程已经全部处理完
Disconnected from the target VM, address: '127.0.0.1:63269', transport: 'socket'
核心思路
- 定义一个接口规范每个执行器的执行方法(如IHandler接口)。
- 定义具体执行器实现类(如ContractHandler、SystemHandler等)。
- 使用链表编排执行器的执行顺序。
应用场景
- 流程编排(如电子流工单处理)
- 资源使用(申请、使用、释放资源)
- 日志记录、权限过滤、请求预处理(如AOP切面编程)
为什么使用责任链模式?
- 业务流程复杂且经常变动时,便于维护。
- 符合开闭原则,易于扩展和调整执行顺序。
变形与扩展
- 节点保存在每个责任链节点的next引用处,形成单链表结构。
- 可以中途结束返回,也可以依次执行每个节点。
- 大型流程可能跨多个服务,不仅仅是方法编排。
总结
设计模式重在理解核心思想,应根据实际场景灵活应用,而不是生搬硬套。责任链模式提供了一种灵活的流程处理方式,适用于需要动态调整处理顺序的场景。
热门推荐
血吸虫长什么样?如何预防血吸虫感染?
美国北卡罗来纳州立大学的情况如何?
如何提升写作技巧以应对“倍速生活”话题
川穹的功效与作用
血常规检查时晕血怎么办
晕血症的症状、诊断与治疗全解析
机动车检测行业服务质量提升的策略与实践
监控摄像机电源系统维护指南:11个实用技巧延长设备寿命
什么情况下可以用 "who" 代替 "whom" ?
提升企业财务健康的有形净值债务率解析
做空和做多哪个更难?币圈做空做多攻略
统计学在数据分析中具体有哪些应用?
二极管型号(如何选择合适的二极管型号)
发光二极管工作当中的电压电流具备哪些参数
提升中文作文能力的五个贴士
世行前经济学家:除基建外,下一代人的中非合作还有三大要务
天堂鸟植物怎么养(天堂鸟养护方法及注意事项)
房东扣押金如何起诉
室性早搏患者应避免食用的五类食物
公司法人是什么意思
普洱茶饮用前必知:探究洗茶的必要性及正确方法
如何养文竹才能更旺盛(详解养文竹的小窍门)
文竹这样养,十年都不会干尖和黄叶!
中华法系的礼刑结合传统及其现代价值
托福听力考试中做笔记的技巧分享
如何化解大门正对厕所的问题?这种化解方法有哪些实际效果?
手机ADB工具助力电脑系统安装:一步步轻松操作
构建信任桥梁,医患沟通中的同理心与有效倾听技巧
“银发顾问”制度将在江苏推广!
价值观的塑造:在日常生活中培养孩子的正确价值观