设计模式——行为型——责任链模式Chain Of Responsibility

请求类
public class ApproverRequest {private int type;//请求批准的类型private float price;//请求的金额private int id;//请求的编号
}
审批人抽象类
public abstract class ApproverPerson {protected ApproverPerson next;protected String name;//审批过程public abstract void processRequest(ApproverRequest request);
}
教导主任类
public class DepartmentApprover extends ApproverPerson {@Overridepublic void processRequest(ApproverRequest request) {System.out.println("教导主任正在处理批准...");if (request.getPrice() <= 5000) {System.out.println("请求编号 id= " + request.getId() + " 被教导主任 " + this.name + " 处理");} else {System.out.println("金额过大,教导主任处理不了,交给院长处理...");next.processRequest(request);}}
}
院长类
public class CollegeApprover extends ApproverPerson {@Overridepublic void processRequest(ApproverRequest request) {System.out.println("院长正在处理批准...");if (request.getPrice() > 5000 && request.getPrice() <= 10000) {System.out.println("请求编号 id= " + request.getId() + " 被院长 " + this.name + " 处理");} else {System.out.println("金额过大,院长处理不了,交给副校长处理...");next.processRequest(request);}}
}
副校长类
public class ViceSchoolMasterApprover extends ApproverPerson {@Overridepublic void processRequest(ApproverRequest request) {System.out.println("副校长正在处理批准...");if (request.getPrice() > 10000 && request.getPrice() <= 15000) {System.out.println("请求编号 id= " + request.getId() + " 被副校长 " + this.name + " 处理");} else {System.out.println("金额过大,副校长处理不了,交给校长处理...");next.processRequest(request);}}
}
校长类
public class SchoolMasterApprover extends ApproverPerson {@Overridepublic void processRequest(ApproverRequest request) {System.out.println("校长正在处理批准...");System.out.println("请求编号 id= " + request.getId() + " 被校长 " + this.name + " 处理");}
}
演示类
public class Demo {public static void main(String[] args) {ApproverRequest request = new ApproverRequest(1, 20000, 1001);ApproverPerson department = new DepartmentApprover("张主任");ApproverPerson college = new CollegeApprover("李院长");ApproverPerson viceSchoolMaster = new ViceSchoolMasterApprover("王副校长");ApproverPerson schoolMaster = new SchoolMasterApprover("佟校长");//设置当前审批人的指针,指向下一个审批人department.setNext(college);college.setNext(viceSchoolMaster);viceSchoolMaster.setNext(schoolMaster);department.processRequest(request);}
}
演示结果

为了使博客的代码更简洁,我把构造方法和set/get方法省略了
相关文章:
设计模式——行为型——责任链模式Chain Of Responsibility
请求类 public class ApproverRequest {private int type;//请求批准的类型private float price;//请求的金额private int id;//请求的编号 } 审批人抽象类 public abstract class ApproverPerson {protected ApproverPerson next;protected String name;//审批过程public a…...
设计模式之工厂方法模式精讲
工厂方法模式又叫虚拟构造函数(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…...
JS实现省市区三级联动(json假数据)
省市级三级联动通常指的是在用户界面上,用户可以通过选择省份,然后基于所选择的省份选择对应的城市,最后基于所选择的城市选择对应的区县。这种联动效果在很多应用中都有出现,例如电商平台的收货地址选择、政务服务的地区选择等。…...
Fastjson配置消息转换器(时间格式问题)
问题: 我们可以看见,日期的格式有点问题。 由于ArticleListVO类的createTime成员变量是Date类型,默认是由java的Jackson来处理,使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法,例如&…...
安卓Android 架构模式及UI布局设计
文章目录 一、Android UI 简介1.1 在手机UI设计中,坚持的原则是什么1.2 安卓中的架构模式1.2.1 MVC (Model-View-Controller)设计模式优缺点 1.2.2 MVP(Model-View-Presenter)设计模式MVP与MVC关系: 1.2.3 MVVM(Model—View—ViewModel ) 设计模式1.2.4 …...
基于Spring Boot的在线学习系统的设计与实现
基于Spring Boot的在线学习系统的设计与实现 摘 要 在线学习系统是以大学传统线下教学方式不适应信息技术的迅速发展为背景,提高学习效率,解决传统教学问题,并且高效的实现教学信息化的一款软件系统。为了更好的实现对于教学和学生的管理&a…...
C++中重载和重写的区别
重载 是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。 #include<bits/stdc.h>using namespace std;cl…...
二叉树 - 栈 - 计数 - leetcode 331. 验证二叉树的前序序列化 | 中等难度
题目 - 点击直达 leetcode 331. 验证二叉树的前序序列化 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理方法1:栈方法2:计数 3. 时间复杂度 3. 代码实现方法1:栈方法2:计数 leetcode 331. 验证二…...
Training language models to follow instructions with human feedback
Abstract 使语言模型变得更大并不意味着它们本身就能更好地遵循用户的意图。模型的输出结果可能存在以下问题 不真实有毒对用户没有帮助即这些模型没有和用户 “对齐”(aligned) 在给定的 Prompt 分布上,1.3B 的 InstructGPT 的输出比 175B GPT-3 的输出更好(尽管参数量相…...
Netty核心原理剖析与RPC实践11-15
Netty核心原理剖析与RPC实践11-15 11 另起炉灶:Netty 数据传输载体 ByteBuf 详解 在学习编解码章节的过程中,我们看到 Netty 大量使用了自己实现的 ByteBuf 工具类,ByteBuf 是 Netty 的数据容器,所有网络通信中字节流的传输都是…...
3.5网安学习第三阶段第五周回顾(个人学习记录使用)
本周重点 ①SSRF服务器端请求伪造 ②序列化和反序列化 ③Vaudit代码审计 本周主要内容 ①SSRF服务器端请求伪造 一、概述 SSRF: server site request forgery (服务器端请求伪造)。 SSR: 服务端请求,A服务器通过函数向B服务器发送请求。 SSRF发生的前提条件…...
kali常用命令功能简介记录
Kali Linux中常用的命令: 1. apt-get update:更新软件源列表。 2. apt-get upgrade:升级系统中已安装的软件包。 3. apt-get install [软件包]:安装指定的软件包。 4. apt-get remove [软件包]:卸载指定的软件包。 5.…...
低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域
应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片,其中D721为单运放,D722为双运放,D724为四运放。适合用于音频领域、传感器等的信号放大处理,比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…...
【统计】什么事 R 方
将线性模型拟合到时间序列时,通常使用最小二乘法在模型 y ^ ( t ) a b t \hat{y}(t) a bt y^(t)abt中找到系数 a a a和 b b b,其中 y ^ ( t ) \hat{y}(t) y^(t)是时间 t t t的预测值,而的观测值是 y ( t ) y(t) y(t)。 残差平方和又…...
Maplesoft Maple 2024(数学科学计算)mac/win
Maplesoft Maple是一款强大的数学计算软件,提供了丰富的功能和工具,用于数学建模、符号计算、数据可视化等领域的数学分析和解决方案。 Mac版软件下载:Maplesoft Maple 2024 for mac激活版 WIn版软件下载:Maplesoft Maple 2024特别…...
实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程--含数据集)
导 读 本文将手把手教你用YoloV8训练自己的数据集并实现手势识别。 安装环境 【1】安装torch, torchvision对应版本,这里先下载好,直接安装 pip install torch-1.13.1+cu116-cp38-cp38-win_amd64.whlpip install torchvision-0.14.1+cu116-cp38-cp38-win_amd64.whl 安装好…...
从零学算法2810
2810.你的笔记本键盘存在故障,每当你在上面输入字符 ‘i’ 时,它会反转你所写的字符串。而输入其他字符则可以正常工作。 给你一个下标从 0 开始的字符串 s ,请你用故障键盘依次输入每个字符。 返回最终笔记本屏幕上输出的字符串。 示例 1&am…...
Vue——案例01(查询用户)
目录 一、案例实现页面 二、案例实现效果 1. 查询效果 2. 年龄升序 3. 年龄降序 4. 原顺序 三、案例实现思路 四、完整代码 一、案例实现页面 实现用户对年龄的升降的排序、根据名字搜索用户信息以及重新返回原序列 二、案例实现效果 1. 查询效果 2. 年龄升序 3. 年龄…...
【数据结构】线性表
文章目录 前言线性表的定义和基本操作1.线性表的定义2.线性表的基本操作 顺序表的定义1.静态分配方式2.动态分配方式 顺序表的插入和删除1.顺序表的插入2.顺序表的删除 顺序表的查找1.按位查找(简单)2.按值查找 单链表的定义1.代码定义一个单链表2.不带头…...
983. 最低票价 C++
class Solution { public:int mincostTickets(vector<int>& days, vector<int>& costs) {// 状态定义: f[i] 表示 i 天及之后 旅行所需的最小花费int f[366]{};// 标注哪些天 出门for (int v: days) f[v] 1;// 由于状态转移是逆向的 所以倒序 …...
MAA明日方舟自动化助手:5分钟快速上手指南
MAA明日方舟自动化助手:5分钟快速上手指南 【免费下载链接】MaaAssistantArknights 一款明日方舟游戏小助手 项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights MAA(MaaAssistantArknights)是一款专为《明日方…...
腾讯云+Astrbot个人AI部署,接入QQ机器人
1、腾讯云创建云服务器 之所以选择腾讯云是因为可以领一个月免费服务器 地址:https://cloud.tencent.com/ 服务器配置情况: 这里我获取的是轻量应用服务器(Lighthouse),适合网站搭建、开发测试等多种场景。以下是详细…...
3分钟掌握图片比对:PicQuickCompare让你高效发现视觉差异
3分钟掌握图片比对:PicQuickCompare让你高效发现视觉差异 【免费下载链接】PicQuickCompare Compare two pictures quickly 项目地址: https://gitcode.com/gh_mirrors/pi/PicQuickCompare PicQuickCompare是一款专为快速图片比对而设计的轻量级工具…...
气象数据可视化必看:ERA5降水资料从m转mm的3种场景解决方案
气象数据可视化实战:ERA5降水资料单位换算与场景化应用指南 当你在深夜的实验室里盯着屏幕上那一串以"m"为单位的降水数据时,是否曾困惑过如何将它们转化为更符合学术惯例的"mm"?作为处理过数百个气象数据集的老手&#…...
OpenClaw语音交互扩展:百川2-13B+Whisper实现语音指令控制
OpenClaw语音交互扩展:百川2-13BWhisper实现语音指令控制 1. 为什么需要语音交互能力 去年冬天的一个深夜,我正在调试OpenClaw的自动化脚本,双手因为长时间敲键盘已经有些僵硬。突然想到:如果能让AI听懂我的语音指令直接执行任务…...
ExcelJS 实战手册:从零构建企业级Excel报表系统
1. ExcelJS入门:为什么选择它构建企业报表? 第一次接触ExcelJS时,我正为一个电商项目头疼——每天要生成近万条订单数据的报表。尝试过直接输出CSV,但客户坚持要带格式的Excel文件;用PHPExcel处理又遇到内存溢出。直到…...
FastAPI 2.0流式响应源码深度拆解,从Starlette 1.12到Pydantic v2.6兼容层的5处隐式await丢失点(生产环境已验证)
第一章:FastAPI 2.0流式响应架构演进与问题定位全景FastAPI 2.0 对流式响应(StreamingResponse)进行了底层重构,核心变化在于将 ASGI 生命周期与异步生成器的生命周期解耦,并引入更严格的流控契约。此前版本中常见的内…...
OpenClaw内存优化:Qwen3-32B-Chat在16G设备运行方案
OpenClaw内存优化:Qwen3-32B-Chat在16G设备运行方案 1. 为什么需要内存优化? 去年冬天,当我第一次尝试在16GB内存的MacBook Pro上运行Qwen3-32B-Chat模型时,系统几乎立即崩溃。这让我意识到,想要在资源有限的设备上运…...
MATLAB图像处理实战:用imfindcircles快速定位硬币边缘(附完整代码)
MATLAB图像处理实战:用imfindcircles快速定位硬币边缘(附完整代码) 在工业检测和医学影像分析中,圆形物体的精准定位往往是关键的第一步。无论是生产线上的硬币质量检查,还是显微镜下的细胞计数,快速准确地…...
用极空间 NAS 搭专属博客:Typecho 部署全攻略,把创作握在自己手里
前言 作为常年折腾各类私有部署工具的科技爱好者,我一直觉得「真正的创作自由」,藏在自己能掌控的服务器里。试过不少博客程序,要么配置繁琐,要么资源占用高,直到把 Typecho 和极空间 NAS 结合,才找到最舒…...
