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

行为型设计模式之Chain of Responsibility(责任链)

行为型设计模式之Chain of Responsibility(责任链)

摘要:
责任链模式是一种行为型设计模式,允许请求沿着处理链传递,直到被某个对象处理。该模式由Handler抽象类定义处理接口,ConcreteHandler具体实现处理逻辑,每个处理者决定处理请求或传递给下个处理者。适用于多个对象可处理请求、请求接收者不明确或需动态指定处理集合的场景。示例代码展示了请假审批链,从小组长到部门经理逐级审批,体现了责任链的动态处理机制。

1)意图

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

2)结构

在这里插入图片描述
其中;

  • Handle 定义一个处理请求的接口;(可选)实现后继链。
  • ConcreHandler 处理它所负责的请求;可访问它的后继者;如果可处理该请求,就处理它,否则将该请求转发给后继者。
  • Client 向链上具体处理着 (ConcreHandler)对象提交请求。

3)适用性

Chain of Responsibility 模式适用于以下条件:

  • 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
  • 想在 不明确指定接收者的情况下向多个对象中的一个提交一个请求。
  • 可处理一个请求的对象集合应被动态的指定。

代码:

/*** @author psd 行为型设计模式之责任链模式*/
public class ChainOfResponsibilityPatternDemo {public static void main(String[] args) {Handler groupLeader = new GroupLeader();Handler projectManager = new ProjectManager();Handler departmentManager = new DepartmentManager();groupLeader.setNext(projectManager);projectManager.setNext(departmentManager);groupLeader.handleRequest(41);}
}abstract class Handler {/*** 下一个处理者*/protected Handler nextHandler;public void setNext(Handler nextHandler) {this.nextHandler = nextHandler;}/*** 请求的个数* * @param request*            请求处理*/public abstract void handleRequest(int request);
}/*** 小组长*/
class GroupLeader extends Handler {@Overridepublic void handleRequest(int request) {if (request <= 3) {System.out.println("小组长处理了请求" + request);} else {if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("无法审批...");}}}
}/*** 项目经理*/
class ProjectManager extends Handler {@Overridepublic void handleRequest(int request) {if (request <= 5) {System.out.println("项目经理处理了请求:" + request);} else {if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("无法审批...");}}}
}/*** 部门经理*/
class DepartmentManager extends Handler {@Overridepublic void handleRequest(int request) {if (request <= 10) {System.out.println("部门领导处理了请求:" + request);} else {if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("无法审批...");}}}
}

喜欢我的文章记得点个在看,或者点赞,持续更新中ing…

http://www.xdnf.cn/news/12341.html

相关文章:

  • 基于JWT+SpringSecurity整合一个单点认证授权机制
  • 低内聚高耦合的衡量指标
  • DTS 数据迁移
  • 在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
  • 【Python-Day 23】Python 模块化编程实战:创建、导入及 sys.path 深度解析
  • 青少年编程与数学 01-011 系统软件简介 06 Android操作系统
  • 相机Camera日志分析之二十七:高通相机Camx 基于预览1帧的process_capture_result二级日志分析详解
  • AOP实现Restful接口操作日志入表方案
  • 事件监听 ——CAD C#二次开发
  • ES6——数组扩展之Set数组
  • 接口限频算法:漏桶算法、令牌桶算法、滑动窗口算法
  • 小黑一层层削苹果皮式大模型应用探索:langchain中智能体思考和执行工具的demo
  • 深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
  • 鸿蒙开发——如何修改模拟器的显示图标/标题
  • 车牌识别技术解决方案
  • day46打卡
  • 如何防止服务器被用于僵尸网络(Botnet)攻击 ?
  • 进一步探究synchronized
  • 408第一季 - 数据结构 - 线性表II
  • Redis哨兵模式
  • 获1.3亿美元融资,NewLimit利用机器学习指导表观遗传程序设计,延长人类健康寿命研究已有初级成果
  • 自建 dnslog 回显平台:渗透测试场景下的隐蔽回显利器
  • Webpack的基本使用 - babel
  • leetcode78. 子集
  • vue项目引入tailwindcss
  • 实战设计模式之模板方法模式
  • SpringBoot 自动化部署实战:CI/CD 整合方案与避坑指南
  • 数据库正常,但后端收不到数据原因及解决
  • 基于sqlite的任务锁(支持多进程/多线程)
  • RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)