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

责任链模式案例

需求背景:

请你设计一个员工休假审批流程,当员工的休假天数<=1时,由直接领导审批,休假天数<=2时,分别由直接领导、一级部门领导审批,休假天数>=3时,分别由直接领导、一级部门领导、分管领导审批。

不使用责任链:

package com.shejimoshi;public class Main {public static void main(String[] args) {RequestParam requestParam = new RequestParam("MJ", 3);if (requestParam.getTime()>=1){System.out.println("领导审批");if (requestParam.getTime()>=2){System.out.println("一级部门领导审批");if (requestParam.getTime()>=3){System.out.println("分管领导审批");}}}}
}

使用责任链各司其职:

抽象审批类AuditHandler,包含下一个处理者的引用nextAuditHandler,通过setNextAuditHandler方法进行注入,从而形成一条链,抽象audit方法,由各个处理者的实现类去实现各自的审批逻辑。

package com.shejimoshi;public abstract class AuditHandler {protected AuditHandler nextAuditHandler;public void setNextAuditHandler(AuditHandler nextAuditHandler) {this.nextAuditHandler = nextAuditHandler;}public abstract void audit(RequestParam requestParam);
}
class DirectLeaderAuditHandler extends AuditHandler{@Overridepublic void audit(RequestParam requestParam) {if (requestParam.getTime()>=1){System.out.println("班主任审批通过");}if (nextAuditHandler != null){nextAuditHandler.audit(requestParam);}else {System.out.println("审批完成");}}
}
class FirstLeaderAuditHandler extends AuditHandler{@Overridepublic void audit(RequestParam requestParam) {if (requestParam.getTime()>=2){System.out.println("学院审批通过");}if (nextAuditHandler != null){nextAuditHandler.audit(requestParam);}else {System.out.println("审批完成");}}
}
class FenGuanLeaderAuditHandler extends AuditHandler{@Overridepublic void audit(RequestParam requestParam) {if (requestParam.getTime()>=3){System.out.println("学校审批通过");}if (nextAuditHandler != null){nextAuditHandler.audit(requestParam);}else {System.out.println("审批完成");}}
}
class Test{public static void main(String[] args) {AuditHandler handler = new DirectLeaderAuditHandler();FirstLeaderAuditHandler firstLeaderAuditHandler = new FirstLeaderAuditHandler();FenGuanLeaderAuditHandler fenGuanLeaderAuditHandler = new FenGuanLeaderAuditHandler();handler.setNextAuditHandler(firstLeaderAuditHandler);firstLeaderAuditHandler.setNextAuditHandler(fenGuanLeaderAuditHandler);RequestParam requestParam = new RequestParam("MJ", 2);handler.audit(requestParam);}
}

摘取:

面试官:什么是责任链模式?_说一说责任链模式面试-CSDN博客

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

相关文章:

  • Android NDK开发(二)——JNIEnv、jobject与jclass关系
  • 机器学习入门:sklearn基础教程
  • 26 | 备库为什么会延迟好几个小时?
  • linux 如何解压.tar 文件
  • 盘点企业信息防泄密软件对比|揭秘企业信息防泄密软件好用榜
  • html--瀑布效果
  • vue视图不刷新强制更新数据this.$forceUpdate()
  • 2024年电工杯数学建模竞赛A题B题思路代码分享
  • leetcode 797.所有可能的路径
  • NPM 基础
  • WPF之创建无外观控件
  • MySQL利用变量进行查询操作
  • 算法--动态规划
  • Python基础详解一
  • 3.SpringSecurity基本原理
  • Cesium--加载天地图
  • 2024蓝桥杯CTF writeUP--packet
  • C++容器——deque
  • docker-compose安装es+kibana 8.12.2
  • websevere服务器从零搭建到上线(二)|Linux上的五种IO模型
  • STM32外设编程指南:GPIO、UART、SPI和I2C
  • git对远程和本地分支进行重命名
  • if 语句逻辑判断顺序
  • 第IV章-Ⅱ Vue3中的插槽使用
  • 【半个月我拿下了软考证】软件设计师高频考点--系统化教学-网络安全
  • E2PROM读写函数
  • MySql中什么是回表? 如何减少回表的次数
  • 【Linux】目录和文件相关的命令,补充:centos7系统目录结构
  • 【读点论文】SAM-LIGHTENING: A LIGHTWEIGHT SEGMENT ANYTHING MODEL,改进自注意力机制,然后知识蒸馏提点
  • PostgreSQL函数和运算符