当前位置: 首页 > news >正文

【设计模式】张一鸣笔记:责任链接模式怎么用?

我将通过一个贴近现实的故事——请假审批流程,带你了解和掌握责任链模式

什么是责任链模式?

责任链模式是一种行为设计模式,它让你可以避免将请求的发送者与接收者耦合在一起,让多个对象都有处理请求的机会将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止

img

责任链模式的使用场景是什么?

当你希望在一个对象链上按顺序发送请求,让其中任何一个对象都有机会处理这个请求时,就可以使用责任链模式。这样,发送者会与一个或多个对象进行解耦合

如何在实际中使用责任链模式?

让我们看看如何在"请假审批"这个场景中使用责任链模式。首先,我们为所有审批人创建一个通用的接口:

public interface Approver {void setNextApprover(Approver nextApprover);void handleRequest(LeaveRequest request);
}

然后,我们为需要处理的请求定义一个类:

public class LeaveRequest {private int leaveDays;// 基础信息如姓名、部门等public LeaveRequest(int leaveDays) {this.leaveDays = leaveDays;}public int getLeaveDays() {return leaveDays;}
}

接着,我们分别实现各级审批人,例如,直接主管:

public class Supervisor implements Approver {private Approver nextApprover;@Overridepublic void setNextApprover(Approver nextApprover) {this.nextApprover = nextApprover;}@Overridepublic void handleRequest(LeaveRequest request) {if (request.getLeaveDays() <= 3) {// 批准请求} else {// 转交给更高级别的主管if (nextApprover != null) {nextApprover.handleRequest(request);}}}
}// 你可以创建更多的审批人,例如经理,HR等,它们的实现方式与主管类似。

接下来,我们可以构建一个完整的责任链:

Approver supervisor = new Supervisor();
Approver manager = new Manager();
Approver hr = new HR();// 设置责任链
supervisor.setNextApprover(manager);
manager.setNextApprover(hr);// 创建一个请假请求
LeaveRequest request = new LeaveRequest(5);
// 发送请求
supervisor.handleRequest(request);

在这个例子中,由于请假天数超过了主管的审批权限(3天),所以主管将请求传递给了经理;如果经理也无法处理,它将再传递给HR。这样,责任链模式使我们可以简单地添加或者删除审批级别,并且使审批过程清晰透明

总结,责任链模式对于管理一个分层次的请求处理机制非常有用,它降低了请求的发送者和接收者之间的耦合度,增强了系统的扩展性。

http://www.lryc.cn/news/287091.html

相关文章:

  • Vulnhub-dc4
  • MySQL45道练习题
  • HTML5和CSS3的新特性
  • 【MySQL】表列数和行大小限制详解
  • 算法基础学习|双指针算法
  • 4.远程登录服务
  • 代码随想录算法训练营第二十九天| 491.递增子序列、46.全排列、47.全排列 II
  • 基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(五)
  • 多场景建模:阿里多场景多任务元学习方法M2M
  • 仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】
  • 【多商户开源-BSD- Fecmall 电商平台】
  • 2023春秋杯冬季赛 --- Crypto wp
  • ImageMagick使用手册
  • 嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第五天-Qt编程技巧若干解答(物联技术666)
  • 【蓝桥杯选拔赛真题59】python小写字母 第十五届青少年组蓝桥杯python 选拔赛比赛真题解析
  • 代码随想录算法训练营Day37|738.单调递增的数字、贪心算法总结
  • 笔记-影响力-对比,互惠,赌徒原理
  • PIL、cv2、numpy,和pytorch(torch)之间的转换
  • Java面试题50道
  • 电脑怎么剪辑视频?这些软件不可错过
  • HBase学习七:Compaction
  • MySQL定期整理磁盘碎片
  • 【centos7安装docker】
  • 四、Flask学习之JavaScript
  • IO 专题
  • MySql索引事务讲解和(经典面试题)
  • 《微信小程序开发从入门到实战》学习九十一
  • 【立创EDA-PCB设计基础】6.布线铺铜实战及细节详解
  • Node.JS CreateWriteStream(大容量写入文件流优化)
  • 安卓开发之自动缩放布局