设计模式--职责链模式

实验15:职责链模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解职责链模式的动机,掌握该模式的结构;

2、能够利用职责链模式解决实际问题。

[实验任务]:财务审批

某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。

类图

 

源代码

public abstract class Leader
{protected String name;protected Leader successor;public Leader(String name){this.name = name;}public void setSuccessor(Leader successor){this.successor = successor;}public abstract void handleRequest(PurchaseRequest request);
}public class DepartmentManager extends Leader
{public DepartmentManager(String name){super(name);}@Overridepublic void handleRequest(PurchaseRequest request){if (request.getMoney() <= 50000){System.out.println("部门经理" + name + "审批采购单,采购单单号为:" + request.getId() + ",金额为:" + request.getMoney() + "元");} else{if (this.successor != null){this.successor.handleRequest(request);}}}
}public class Director extends Leader
{public Director(String name){super(name);}@Overridepublic void handleRequest(PurchaseRequest request){if (request.getMoney() <= 10000){System.out.println("主任" + name + "审批采购单,采购单单号为:" + request.getId() + ",金额为:" + request.getMoney() + "元");} else{if (this.successor != null){this.successor.handleRequest(request);}}}
}public class GeneralManager extends Leader
{public GeneralManager(String name){super(name);}@Overridepublic void handleRequest(PurchaseRequest request){if (request.getMoney() <= 200000){System.out.println("总经理" + name + "审批采购单,采购单单号为:" + request.getId() + ",金额为:" + request.getMoney() + "元");} else{System.out.println("采购单单号为:" + request.getId() + ",金额为:" +request.getMoney() + "元,金额太大,需开职工大会确定是否审批通过");}}
}public class Manager extends Leader
{public Manager(String name){super(name);}@Overridepublic void handleRequest(PurchaseRequest request){if (request.getMoney() <= 100000){System.out.println("副总经理" + name + "审批采购单,采购单单号为:" + request.getId() + ",金额为:" + request.getMoney() + "元");} else{if (this.successor != null){this.successor.handleRequest(request);}}}
}public class PurchaseRequest
{private int money;private int id;public PurchaseRequest(int id, int money){this.id = id;this.money = money;}public int getMoney(){return money;}public void setMoney(int money){this.money = money;}public int getId(){return id;}public void setId(int id){this.id = id;}
}public class Client
{public static void main(String[] args){Leader objDirector, objDepartmentManager, objManager, objGeneralManager;objDirector = new Director("张三");objDepartmentManager = new DepartmentManager("李四");objManager = new Manager("王五");objGeneralManager = new GeneralManager("赵六");objDirector.setSuccessor(objDepartmentManager);objDepartmentManager.setSuccessor(objManager);objManager.setSuccessor(objGeneralManager);PurchaseRequest pr1=new PurchaseRequest(1001,10000);objDirector.handleRequest(pr1);PurchaseRequest pr2=new PurchaseRequest(1002,50000);objDirector.handleRequest(pr2);PurchaseRequest pr3=new PurchaseRequest(1003,100000);objDirector.handleRequest(pr3);PurchaseRequest pr4=new PurchaseRequest(1004,200000);objDirector.handleRequest(pr4);PurchaseRequest pr5=new PurchaseRequest(1005,200001);objDirector.handleRequest(pr5);}
}

运行效果

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

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

相关文章

Window系统显存不足时利用共享内存继续运行

存在问题 在进行实验过程中&#xff0c;时常碰到显存不足的问题&#xff0c;此时要么需要减小模型体积&#xff0c;要么减小batch-size大小&#xff0c;但这势必会对结果造成一定影响&#xff0c;此时我们可以使用GPU共享内存的方法来扩充显存。 解决方法 GPU有几个重要参数…

otter-harbor同步

一. 部署及依赖 otter Github (一). 服务启动 1. mysql 5.6版本以上&#xff0c;作为 otter-manger 使用的数据库 # mysql docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 --character-set-serverutf8mb4 --collation-serverutf8mb4_un…

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题&#xff1a;Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演&#xff08;FWI&#xff09;是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

<avatar: frontiers of pandora>技术overview

https://www.eurogamer.net/digitalfoundry-2023-avatar-frontiers-of-pandora-and-snowdrop-the-big-developer-tech-interview https://www.youtube.com/watch?vLRI_qgVSwMY&t394s 主要来自euro gamer上digital foundry对于avatar的开发团队Massive工作室的采访&#xf…

Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

1.进程与线程定义 进程包含线程&#xff0c;如一个百度网盘进程&#xff0c;该进程的线程可以有上传&#xff0c;下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码&#xff1a; f1.get…

实现打印一个数字金字塔。例如:输入5,图形如下图所示

1*12**123***1234**** 12345*****#include<stdio.h> void main() {int i,j,l,n,k;scanf("%d",&n);/**********Program**********//********** End **********/ } 当我们拿到这个题目的时候可以看见题目给了我们五个变量&#xff0c;其中n是我们输入的数…

Linux:jumpserver V3的安装与升级(在线离线)(2)

官方文档写的非常详细&#xff0c;我这篇文章时间长了&#xff0c;会随着官方版本更新而落后 JumpServer - 开源堡垒机 - 官网https://www.jumpserver.org/安装和升级在官网也有详细的信息&#xff0c;我写本章是为了记录一下实验 我的系统是centos7.9 在线安装 在确定我们可…

CnosDB如何确保多步操作的最终一致性?

背景 在时序数据库中&#xff0c;资源的操作是一个复杂且关键的任务。这些操作通常涉及到多个步骤&#xff0c;每个步骤都可能会失败&#xff0c;导致资源处于不一致的状态。例如&#xff0c;一个用户可能想要在CnosDB集群中删除一个租户&#xff0c;这个操作可能需要删除租户…

2023 年最受欢迎的 12 款 Chrome 浏览器扩展

掘金2023年度人气创作者打榜中&#xff0c;快来帮我打榜吧&#xff5e; 谷歌浏览器Chrome是目前最受欢迎的浏览器之一&#xff0c;而浏览器扩展则是为了提升用户体验和功能而开发的插件。 2023年谷歌公布了12款最受欢迎的Chrome浏览器扩展。每个都提供独特的功能来增强您的浏览…

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化 基础地图使用基础地图演示基础地图演示 - 视觉映射器 疫情地图-国内疫情地图案例效果数据整理 疫情地图-省级疫情地图省疫情地图 基础地图使用 基础地图演示 代码示例&#xff1a; &quo…

jQuery实现响应式瀑布流 - 实现灯箱效果

在这之前&#xff0c;有写过一篇关于实现瀑布流的文章&#xff0c;后期有人留言提出需要添加灯箱效果的功能&#xff0c;所以这次则讲述下如何实现此功能。由于该篇接上篇写的&#xff1a;jQuery实现响应式瀑布流效果&#xff08;jQueryflex&#xff09;_jquery瀑布流插件-CSDN…

进程间通信---信号

什么是信号&#xff1f; 】 信号处理流程 信号类型 发送信号的函数 参数sig&#xff1a;代表 信号 接收信号的函数 参数 handle 的处理方式有几种&#xff1f; 实例代码 实例逻辑 图中的等待操作使用&#xff1a;pause&#xff08;&#xff09;函数 代码 在这里插入代码片…