登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
安全
›
【流程流转解耦设计模式】责任链模式
【流程流转解耦设计模式】责任链模式
[ 复制链接 ]
兑谓
2025-6-1 20:54:54
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
责任链模式保姆级教程:基于Spring Boot的代码示例
1. 什么是责任链模式?
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者与接收者之间的耦合。责任链模式将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。
1.1 责任链模式的核心思想
解耦
:将请求的发送者和处理者解耦,使得多个对象都有机会处理请求。
灵活性
:可以动态地调整链中的处理者,增加或删除处理者。
责任分离
:每个处理者只关心自己能否处理请求,如果不能处理,则将请求传递给下一个处理者。
1.2 责任链模式的应用场景
多级审批流程
:例如请假审批、报销审批等。
过滤器链
:例如Web应用中的过滤器链、拦截器等。
日志处理
:不同级别的日志由不同的处理器处理。
2. 责任链模式的实现
2.1 责任链模式的结构
责任链模式通常包含以下几个角色:
Handler(抽象处理者)
:定义一个处理请求的接口,通常包含一个指向下一个处理者的引用。
ConcreteHandler(具体处理者)
:实现处理请求的具体逻辑,如果自己不能处理,则将请求传递给下一个处理者。
Client(客户端)
:创建责任链,并向链中的第一个处理者发送请求。
2.2 基于Spring Boot的责任链模式实现
下面我们通过一个简单的例子来演示如何在Spring Boot中实现责任链模式。假设我们有一个请假审批系统,请假请求需要经过多个层级的审批:组长、经理、总监。
2.2.1 创建抽象处理者
首先,我们定义一个抽象处理者 LeaveHandler,它包含一个指向下一个处理者的引用。
public abstract class LeaveHandler {
protected LeaveHandler nextHandler;
public void setNextHandler(LeaveHandler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(LeaveRequest request);
}
复制代码
2.2.2 创建具体处理者
接下来,我们创建三个具体处理者:GroupLeaderHandler、ManagerHandler 和 DirectorHandler。
@Component
public class GroupLeaderHandler extends LeaveHandler {
@Override
public void handleRequest(LeaveRequest request) {
if (request.getDays() <= 1) {
System.out.println("组长批准了 " + request.getDays() + " 天的请假申请。");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
@Component
public class ManagerHandler extends LeaveHandler {
@Override
public void handleRequest(LeaveRequest request) {
if (request.getDays() > 1 && request.getDays() <= 3) {
System.out.println("经理批准了 " + request.getDays() + " 天的请假申请。");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
@Component
public class DirectorHandler extends LeaveHandler {
@Override
public void handleRequest(LeaveRequest request) {
if (request.getDays() > 3) {
System.out.println("总监批准了 " + request.getDays() + " 天的请假申请。");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
复制代码
2.2.3 创建请假请求类
我们还需要一个 LeaveRequest 类来表示请假请求。
public class LeaveRequest {
private int days;
public LeaveRequest(int days) {
this.days = days;
}
public int getDays() {
return days;
}
}
复制代码
2.2.4 配置责任链
在Spring Boot中,我们可以通过配置类来组装责任链。
@Configuration
public class LeaveHandlerConfig {
@Autowired
private GroupLeaderHandler groupLeaderHandler;
@Autowired
private ManagerHandler managerHandler;
@Autowired
private DirectorHandler directorHandler;
@Bean
public LeaveHandler leaveHandlerChain() {
groupLeaderHandler.setNextHandler(managerHandler);
managerHandler.setNextHandler(directorHandler);
return groupLeaderHandler;
}
}
复制代码
2.2.5 使用责任链处理请求
最后,我们可以在服务类中使用责任链来处理请假请求。
@Service
public class LeaveService {
@Autowired
private LeaveHandler leaveHandlerChain;
public void submitLeaveRequest(LeaveRequest request) {
leaveHandlerChain.handleRequest(request);
}
}
复制代码
2.2.6 测试责任链
我们可以编写一个简单的测试类来测试责任链的工作情况。
@SpringBootApplication
public class ChainOfResponsibilityApplication implements CommandLineRunner {
@Autowired
private LeaveService leaveService;
public static void main(String[] args) {
SpringApplication.run(ChainOfResponsibilityApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
LeaveRequest request1 = new LeaveRequest(1);
LeaveRequest request2 = new LeaveRequest(2);
LeaveRequest request3 = new LeaveRequest(4);
leaveService.submitLeaveRequest(request1);
leaveService.submitLeaveRequest(request2);
leaveService.submitLeaveRequest(request3);
}
}
复制代码
运行程序后,输出结果如下:
组长批准了 1 天的请假申请。
经理批准了 2 天的请假申请。
总监批准了 4 天的请假申请。
复制代码
3. 责任链模式的优缺点
3.1 优点
解耦
:请求的发送者和处理者之间没有直接的依赖关系,降低了系统的耦合度。
灵活性
:可以动态地增加或修改处理链,符合开闭原则。
责任分离
:每个处理者只负责处理自己能处理的请求,职责清晰。
3.2 缺点
性能问题
:如果责任链过长,可能会导致请求处理速度变慢。
调试困难
:由于请求在链中传递,调试时可能难以跟踪请求的处理过程。
4. 总结
责任链模式是一种非常实用的设计模式,特别适用于需要多级处理的场景。通过责任链模式,我们可以将复杂的处理逻辑分解到多个处理者中,使得系统更加灵活和可扩展。在Spring Boot中,我们可以通过依赖注入和配置类来轻松实现责任链模式。
希望这篇博客能帮助你更好地理解责任链模式,并在实际项目中灵活运用。如果你有任何问题或建议,欢迎在评论区留言!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
流程
流转
解耦
设计模式
责任
相关帖子
海外仓一件代发的操作流程是怎么样的?如何提高订单处理效率?
海外仓一件代发的操作流程是怎么样的?如何提高订单处理效率?
投标流程多、推进慢,如何实现高效线上化?
使用程序化的流程让智能体工作
SHEIN怎么上架产品?SHEIN上架流程一览!附工具推荐!
SHEIN怎么上架产品?SHEIN上架流程一览!附工具推荐!
大模型智能体 (agent)简易流程介绍
OpenClaw+优云智算Coding Plan:从灵感到成文,再到公众号发布的全流程AI自动化
Android R8适配全流程详解
用SKILL实现请假流程信息收集
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
海外仓一件代发的操作流程是怎么样的?如何提高订单处理效率?
4
34
百里宵月
2026-03-10
安全
海外仓一件代发的操作流程是怎么样的?如何提高订单处理效率?
2
141
胆饬
2026-03-10
安全
投标流程多、推进慢,如何实现高效线上化?
0
41
荪俗
2026-03-13
安全
使用程序化的流程让智能体工作
3
39
煞赶峙
2026-03-13
安全
SHEIN怎么上架产品?SHEIN上架流程一览!附工具推荐!
3
33
扔飒
2026-03-13
安全
SHEIN怎么上架产品?SHEIN上架流程一览!附工具推荐!
0
52
东郭欣然
2026-03-13
业界
大模型智能体 (agent)简易流程介绍
2
1010
焦尔蕾
2026-03-25
业界
OpenClaw+优云智算Coding Plan:从灵感到成文,再到公众号发布的全流程AI自动化
1
503
墨佳美
2026-03-25
安全
Android R8适配全流程详解
0
822
羽桑
2026-03-27
安全
用SKILL实现请假流程信息收集
1
78
祖娅曦
2026-04-01
回复
(31)
榷另辑
2025-11-29 04:41:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
丰江
2025-12-1 04:49:41
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
哈妙思
2025-12-12 23:14:08
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
衣旱
2025-12-14 20:55:21
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
孜尊
2025-12-24 13:38:40
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
拙因
2025-12-31 20:54:07
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
椎蕊
2026-1-19 07:18:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
姬宜欣
2026-1-19 23:13:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
威割
2026-1-20 14:12:31
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
呵桢
2026-1-21 02:15:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
敖可
2026-1-21 09:32:51
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
劳暄美
2026-1-23 04:05:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
玻倌瞽
2026-1-23 07:51:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
空娅芬
2026-1-29 06:42:05
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
越蔓蔓
2026-2-4 10:24:01
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
秦晓曼
2026-2-7 23:56:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
钿稳铆
2026-2-8 10:03:02
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
套缈
2026-2-8 14:42:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
益竹月
2026-2-8 20:52:41
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
兑谓
2026-2-8 20:52:41
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991126
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9517
6
宋子
9876
7
韶又彤
9909
8
荪俗
8991
9
蓬森莉
9868
10
俞瑛瑶
10000
查看更多
今日好文热榜
395
天谋科技入选北京市 2026 年第一批专精特新
155
AI对普通人到底有什么用?这8个场景告诉你
77
【节点】[Reciprocal节点]原理解析与实际应
254
为什么使用 Skillsbase 维护自己的 Skills
368
WorkBuddy:快速开启龙虾(OpenClaw)之旅
541
为什么使用 Skillsbase 维护自己的 Skills
869
为什么使用 Skillsbase 维护自己的 Skills
192
为什么使用 Skillsbase 维护自己的 Skills
688
自我即自感:一种极简存在论(四篇)
706
为什么现在所有大厂都在做 CLI ?(附Cluade
390
GitHub 热门项目 Top 10 | 2026年04月07日
533
.NET 高级开发 | .NET 中的序列化和反序列
88
读2025世界前沿技术发展报告34海洋信息技术
731
读2025世界前沿技术发展报告34海洋信息技术
296
程序员AI编程之提示词【学习笔记】
805
Tcache attack
852
AgileAI - 一个新的 .NET AI 库
302
OpenClaw AI助手本地部署完整教程
25
AI 编程助手 + 基于 CLI 的 Manus 实现(Ja
719
React 技术深度探讨