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

行为型设计模式之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…

相关文章:

  • 【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程
  • 什么是权威解析服务器?权威解析服务器哪些作用?
  • Xshell 详细安装与配置教程:从下载到高效使用
  • PostgreSQL 技术峰会,聚焦国产生态与前沿技术
  • Java调用大模型API实战指南
  • QT: `long long` 类型转换为 `QString` 2025.6.5
  • 栈的概念以及实现
  • 超大规模芯片验证:基于AMD VP1902的S8-100原型验证系统实测性能翻倍
  • 智能化弱电工程项目管理培训
  • Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 电子联锁
  • Java并发编程实战 Day 12:阻塞队列与线程协作
  • 【论文+硬件】HOMIE:定制外骨骼 、手套和脚踏座舱低成本操控人形机器人+强化学习自主下蹲抓取物体 框架
  • Day 41 训练
  • C语言字符数组初始化的5种方法(附带实例)
  • 使用 C/C++ 和 OpenCV 实现滑动条控制图像旋转
  • 04 Deep learning神经网络编程基础 梯度下降 --吴恩达
  • 【Zephyr 系列 12】BLE + NVS + 低功耗融合实战:打造可配置蓝牙信标系统
  • 【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码
  • [论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力
  • 电脑桌面太单调,用Python写一个桌面小宠物应用。
  • 做瑜伽网站/建站网站关键词优化
  • 传奇手游大型网站/搜索引擎营销推广方案
  • 深圳公司网站推广/seo网络优化
  • 成都成华区网站建设/视频推广一条多少钱
  • 做网站的论文摘要/网络营销品牌推广
  • 嘉兴商城网站开发设计/指数基金定投技巧