登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
【流程流转解耦设计模式】责任链模式
【流程流转解耦设计模式】责任链模式
[ 复制链接 ]
兑谓
2025-6-1 20:54:54
责任链模式保姆级教程:基于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中,我们可以通过依赖注入和配置类来轻松实现责任链模式。
希望这篇博客能帮助你更好地理解责任链模式,并在实际项目中灵活运用。如果你有任何问题或建议,欢迎在评论区留言!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
流程
流转
解耦
设计模式
责任
相关帖子
设计模式之 Target/Action
流程控制 for switch range break goto
项目管理流程详解:五大阶段+规范化执行指南,PM必备知识体系!
OTA测试实战指南:测试流程、用例设计与自动化实现
流程编排及可视化
软件设计模式系列之四——简单工厂模式
解析设计模式与设计原则:构建可维护性和可扩展性代码的重要性
接口测试全流程实战:从工具到架构的深度解析
化工反应釜全流程监控中Modbus TCP 转DeviceNet协议下西门子 S7-1200
记录 | 个人开发库推送至PyPi流程梳理(ChatGPT to Markdown 工具发布完整流程)
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
设计模式之 Target/Action
1
531
甦忻愉
2025-09-30
业界
流程控制 for switch range break goto
1
444
姚望舒
2025-10-01
安全
项目管理流程详解:五大阶段+规范化执行指南,PM必备知识体系!
0
523
敕码
2025-10-01
安全
OTA测试实战指南:测试流程、用例设计与自动化实现
1
829
敞撬
2025-10-06
安全
流程编排及可视化
0
575
能拘
2025-10-10
安全
软件设计模式系列之四——简单工厂模式
0
994
愆蟠唉
2025-10-10
安全
解析设计模式与设计原则:构建可维护性和可扩展性代码的重要性
1
481
涂流如
2025-10-11
科技
接口测试全流程实战:从工具到架构的深度解析
0
191
泠邸
2025-10-11
科技
化工反应釜全流程监控中Modbus TCP 转DeviceNet协议下西门子 S7-1200
0
603
襁壮鸢
2025-10-12
业界
记录 | 个人开发库推送至PyPi流程梳理(ChatGPT to Markdown 工具发布完整流程)
0
426
人弧
2025-10-20
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
兑谓
2025-6-1 20:54:54
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
dage888
999994
3934307807
992122
4
富账慕
9977
5
邹语彤
9979
6
二艰糖
9997
7
刎唇
9993
8
匝抽
9986
9
聚怪闩
9960
10
孙淼淼
9977
查看更多