设计模式之责任链模式详解
创作时间:
作者:
@小白创作中心
设计模式之责任链模式详解
引用
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引用处,形成单链表结构。
- 可以中途结束返回,也可以依次执行每个节点。
- 大型流程可能跨多个服务,不仅仅是方法编排。
总结
设计模式重在理解核心思想,应根据实际场景灵活应用,而不是生搬硬套。责任链模式提供了一种灵活的流程处理方式,适用于需要动态调整处理顺序的场景。
热门推荐
积分兑换礼物,想喝奶茶都能实现!青岛这位班主任管班有妙招
馒头的常见分类有哪些 馒头的营养成分和价值
如何为任何Mac App创建自定义键盘快捷键
奥村春弱点揭秘:专家深度解析P5重要角色的潜在短板
柳叶刀新研究揭示,他汀类药物与血糖升高的真相
什么是基于价值的定价?
艾灸盒怎么清洗
艾灸盒怎么清洗?专业医生详解清洁保养方法
解析生产型企业增值税计算的法律要点及实务操作
宝宝吃蓝莓的好处是什么
孩子上初中,三餐很关键,深扒12款宝藏美食,保姆级攻略菜谱
2024-2025中国男子篮球职业联赛上海久事大鲨鱼主场赛观赛指南
脑洞大开!他们把二氧化碳关进海底......
生理期能不能吃巧克力?
科技赋能!打造城市交通管理超级场景!
圆明园的毁灭:一段屈辱的历史,一座文化的丰碑
如何分析券商股上涨的条件?这些条件对市场趋势有何预示?
二手房出售需要满几年?贷款问题如何处理?
税务滞纳金对公司经营的影响及应对策略
阿难“多闻第一”,侍奉了佛陀二十五年,为何却迟迟未证果得道?
五常大米价格多少钱一斤
爱尔兰移民问题引发社会动荡,寻求庇护者数量增加300%
五险一金到底有用吗?每个月都交钱,到底划算不划算?
“五险一金”包括什么?广州缴费基数及比例是多少?
不等了,即刻满足!90后在“国补”消费中更爱叠加信用分期
如何理解量化自动交易的原理?这种交易方式的风险如何管控?
冬季骑行6个关系到健康和安全的注意事项
从联想品牌看企业文化建设的重要性
睡觉时枕头过高引起颈椎痛如何治疗
4090显卡功耗:一天电费究竟是多少?