职责链模式

职责链模式

文章目录

  • 职责链模式
    • 什么是职责链模式
    • 通过示例了解职责链模式

什么是职责链模式

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

通过示例了解职责链模式

职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理者对象的链式结构传递,直到某个对象处理它。下面是一个简单的Java职责链模式示例,用于处理不同级别的员工请假申请:

抽象处理者:员工接口

public interface Employee {void setNext(Employee employee);void processLeaveRequest(Integer leaveDays);
}

具体处理者:普通员工

public class RegularEmployee implements Employee {private Employee next;@Overridepublic void setNext(Employee employee) {this.next = employee;}@Overridepublic void processLeaveRequest(Integer leaveDays) {if (leaveDays <= 3) {System.out.println("Regular employee approved 3 days or less leave.");} else if (next != null) {System.out.println("Regular employee forwarded the request to higher authority.");next.processLeaveRequest(leaveDays);} else {System.out.println("Leave request exceeds regular employee's limit.");}}
}

具体处理者:主管

public class Manager implements Employee {private Employee next;@Overridepublic void setNext(Employee employee) {this.next = employee;}@Overridepublic void processLeaveRequest(Integer leaveDays) {if (leaveDays <= 7) {System.out.println("Manager approved 7 days or less leave.");} else if (next != null) {System.out.println("Manager forwarded the request to higher authority.");next.processLeaveRequest(leaveDays);} else {System.out.println("Leave request exceeds manager's limit.");}}
}

具体处理者:部门经理

public class DepartmentHead implements Employee {@Overridepublic void setNext(Employee employee) {// 不需要设置下一个处理者,因为部门经理是最高级别的审批人}@Overridepublic void processLeaveRequest(Integer leaveDays) {if (leaveDays <= 14) {System.out.println("Department head approved 14 days or less leave.");} else {System.out.println("Leave request exceeds department head's limit.");}}
}

主程序

public class ChainOfResponsibilityDemo {public static void main(String[] args) {Employee regular = new RegularEmployee();Employee manager = new Manager();Employee departmentHead = new DepartmentHead();regular.setNext(manager);manager.setNext(departmentHead);regular.processLeaveRequest(5); // 输出:Regular employee approved 3 days or less leave.regular.processLeaveRequest(8); // 输出:Regular employee forwarded the request to higher authority. Manager approved 7 days or less leave.regular.processLeaveRequest(16); // 输出:Regular employee forwarded the request to higher authority. Manager forwarded the request to higher authority. Leave request exceeds department head's limit.}
}
  1. Employee接口是抽象处理者,定义了设置下一个处理者和处理请假申请的方法。
  2. RegularEmployee, Manager, 和 DepartmentHead是具体处理者,实现了Employee接口,并根据各自的权限范围处理请假申请。
  3. 职责链的建立是通过setNext方法将处理者对象链接在一起。
  4. main方法展示了如何创建职责链,并通过processLeaveRequest方法处理不同数量的请假天数请求。

职责链模式允许在不增加额外的复杂性的情况下添加新的处理者,同时保持了请求的发送者和接收者的解耦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软中国 AI 团队搬至美国?可解决家属签证

多位网友爆料称&#xff0c;微软中国数百名员工收到公司邮件&#xff0c;询问是否愿意迁移至美国、澳大利亚、爱尔兰等国家工作。公司将负责亲属签证问题&#xff0c;以Azure云平台的AI团队为主&#xff0c;员工需要在6月7日前给出答复。 有微软员工表示情况属实&#xff0c;这…

文本三剑客-awk

一、awk的介绍 1.1awk的简介 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具 可以在无交互的模式下实现复杂的文本操作 相较于sed常作用于一整个行的处理&#xff0c;awk则比较倾向于一行当中分成数个字段来处理&#xff0c;因为awk相当适合小型的文本…

IT行业现状与未来趋势:洞察变革的浪潮

IT行业现状与未来趋势&#xff1a;洞察变革的浪潮 一、引言 随着科技的飞速发展&#xff0c;IT行业已经成为推动全球经济和社会进步的重要力量。从云计算、大数据到人工智能、区块链&#xff0c;每一项技术的革新都在重塑着我们的生活方式和工作模式。本文将探讨当前IT行业的…

Synerg FATAL

Synerg FATAL Synerg使用存在的问题 Synerg使用存在的问题 FATAL: failed to start server: cannot bind address: The specified address is not available from the local machine启动失败的原因&#xff0c;先排除是否有中文路径和电脑IP与软件IP是否一致&#xff0c;用Syn…

什么是TCP协议,TCP协议存在哪些安全挑战

TCP作为是互联网中最重要的协议之一&#xff0c;随着网络技术的不断发展&#xff0c;TCP使用范围越来越广&#xff0c;TCP协议也面临着越来越多的安全挑战。下面我们就来探讨下什么是TCP协议&#xff0c;TCP协议存在哪些安全挑战。 一、了解TCP协议 TCP&#xff08;Transmissi…

AI大模型没那么神秘,3个超简单秘诀让你轻松上手!| 塑造AI时代新思维

01、国内的大模型超优秀 是不是听说ChatGPT的强大功能后&#xff0c;早就手痒了&#xff0c;可是受限于环境&#xff0c;在为无法使用而遗憾呢&#xff1f; 别急&#xff0c;我们国内的大模型也棒棒的&#xff0c;在中文领域已经超越了ChatGPT3.5&#xff0c;还是免费的&…

Python代码:九、十六进制数字的大小

1、题目 计算的世界&#xff0c;除了二进制与十进制&#xff0c;使用最多的就是十六进制了&#xff0c;现在使用input读入一个十六进制的数字&#xff0c;输出它的十进制数字是多少&#xff1f; 2、代码 import sysnum16 input() num10 int(num16,16) print(num10) 3、结…

域信息收集

文章目录 一、基础信息收集1、查看系统详细信息2、查看系统中是否存在杀软3、查看系统开启的服务3、其他命令 二、凭据信息收集2.1 wifi信息2.2 相关工具 三、横向信息收集 一、基础信息收集 收集版本、补丁、服务、任务、防护等。 1、查看系统详细信息 systeminfo # 查看系…

AI绘画原理及工具介绍

市面上的AI绘画工具是运用人工智能技术来辅助或自动完成绘画创作的工具。这些工具依托于深度学习和图像处理技术&#xff0c;能够学习和模仿人类绘画的风格和技巧&#xff0c;从而生成具有艺术感的图像。以下是关于市面上AI绘画工具的详细介绍&#xff1a; 一、原理 数据收集…

快手截流多功能协议引流多线程多账号使用

在市场上&#xff0c;类似的软件售价都在几千元&#xff0c;但我发现这款全新版本的软件已经更新&#xff0c;而且我只需要配合使用谷歌浏览器&#xff0c;稍微调慢一点延时&#xff0c;我就可以像专业人士一样流畅地进行操作。 评论对于我而言是一种艺术&#xff0c;而不仅仅是…

Elasticsearch:向量相似度技术和评分

作者&#xff1a;来自 Elastic Valentin Crettaz 当需要搜索自由文本并且 CtrlF / CmdF 不再有效时&#xff0c;使用词法搜索引擎通常是你想到的下一个合理选择。 词汇搜索引擎擅长分析要搜索的文本并将其标记为可在搜索时匹配的术语&#xff0c;但在理解和理解被索引和搜索的…

[Cocos Creator 3.5赛车游戏]第3节 新建项目

环境已经配置好&#xff0c;现在您将真正的开始开发您的项目&#xff0c;开发项目的第一步是新建项目。所以现在请关闭上一个步骤打开的Cocos Creator窗口&#xff0c;回到CocosDashboard&#xff0c;点击“新建”按钮&#xff1a; 选择“模板”选项卡&#xff0c;因为您即将开…

2024 Google I/O - 提前窥探 Android 15 的新功能与适配

今年年初就简单介绍过 Android 15 预览版 的相关内容&#xff0c;而昨天 Google I/O 宣布了 Android 15 Beta2&#xff0c;作为第二个 Beta 版本 &#xff0c;它已经基本接近它未来的样子&#xff0c;毕竟下个版本就是 Platform Stability 了&#xff0c;所以让我们提前来一睹 …

数字化转型浪潮下,低代码技术如何重塑保险行业?

保险行业进行数字化转型的必要性源于多个方面&#xff0c;随着科技的进步和互联网的普及&#xff0c;客户对保险服务的需求日益个性化和便捷化。他们期望能够随时随地在线购买保险、查询保单信息&#xff0c;并享受到快速、高效的理赔服务。数字化转型可以帮助保险公司满足这些…

docker容器与centos宿主机时间一致设置

1、查看宿主机的系统时间 date -R 2、进入到容器中查看容器系统时间 docker exec -it storage /bin/bash date -R 3、查看容器系统时区 cat /etc/timezone 4、查看宿主机所在时区 timedatectl 5、创建容器时间&#xff0c;并退出进入的容器 6、将宿主日期复制到容器内部&…

微信可以正常连接网络 浏览器访问不了外网

今天工作打开电脑&#xff0c;发现浏览器上不了网&#xff0c;百度都点不开。点击网络诊断&#xff0c;显示网络连接正常。重启了两次&#xff0c;浏览器还是连接不上外网。打开微信&#xff0c;微信还能正常使用。 仔细想一想&#xff0c;我昨天对电脑做了什么&#xff0c;特殊…

【漏洞复现】方正全媒体采编系统密码泄露漏洞

0x01 产品简介 方正全媒体新闻采编系统是一个面向媒体深度融合的技术平台&#xff0c;它以大数据和AI技术为支撑&#xff0c;集成了指挥中心、采集中心、编辑中心、发布中心、绩效考核中心、资料中心等多个功能&#xff0c;全面承载“策采编审发存传评”的融媒体业务流程。 0…

Block常见面试题精华版

block本质是什么&#xff0c;需要注意什么&#xff1f; Block 的本质是一个封装了函数和函数调用环境&#xff08;捕获的变量&#xff09;的 Objective-C 对象。Block 的实现基于 C 语言的函数指针&#xff0c;但它们比普通的函数指针更加强大&#xff0c;因为它们能够捕获周围…

纯血鸿蒙APP实战开发——Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作&#xff0c;解压成功后将解压路径返回主线程&#xff0c;获取解压文件列表。 效果图预览 使用说明 点击解压按钮&#xff0c;解压test.zip文件&#xff0c;显…