实验内容(1)职责模式编程要求:为了促进广东海洋大学教学质量的提升,学校加大了教学经费的投入,各归口职能部门,如教务处、校团委等都通过二次分配划拨了相应经费到学院支持教学改革、学生创新创业等。为了规范财务报销,财务处于2022年1月发布了相关资金审批权限简表,其中规定如下表。学校一级专项预算经费和校外专项经费进行二次分配到单位(学院)/项目的经费5万元以下单位(学院)负责人审批5-10万元以下归口职能部门负责人审批10-50万元以下分管校领导审批50万元以上主管财务校领导审批,利用职责编程对上述场景进行实现;(2)另外列举一个生活中可以用到职责模式的场景,并简述指责模式的优缺点。

时间: 2023-06-24 21:09:15 浏览: 51
(1)职责模式编程实现: 首先,我们需要定义一个抽象类或者接口来表示审批人,该类或接口中至少包含一个审批方法。然后,我们定义具体的审批人类,它们实现了审批方法并根据自己的权限进行审批,如果权限不足则将请求传递给下一个审批人。最后,我们定义一个请求类,包含请求的金额和请求的类型,在客户端中创建请求实例并将其传递给第一个审批人,第一个审批人根据自己的权限进行审批,如果权限不够则将请求传递给下一个审批人,以此类推,直到请求被完全处理。 以下是一个简单的示例代码: ```java // 抽象审批人类 abstract class Approver { protected Approver nextApprover; // 下一个审批人 public void setNextApprover(Approver nextApprover) { this.nextApprover = nextApprover; } public abstract void approve(Request request); } // 负责人审批类 class LeaderApprover extends Approver { @Override public void approve(Request request) { if (request.getAmount() < 50000) { System.out.println("负责人审批通过,金额:" + request.getAmount()); } else { if (nextApprover != null) { nextApprover.approve(request); } } } } // 归口职能部门负责人审批类 class FunctionApprover extends Approver { @Override public void approve(Request request) { if (request.getAmount() >= 50000 && request.getAmount() < 100000) { System.out.println("归口职能部门负责人审批通过,金额:" + request.getAmount()); } else { if (nextApprover != null) { nextApprover.approve(request); } } } } // 分管校领导审批类 class LeaderApprover2 extends Approver { @Override public void approve(Request request) { if (request.getAmount() >= 100000 && request.getAmount() < 500000) { System.out.println("分管校领导审批通过,金额:" + request.getAmount()); } else { if (nextApprover != null) { nextApprover.approve(request); } } } } // 主管财务校领导审批类 class LeaderApprover3 extends Approver { @Override public void approve(Request request) { if (request.getAmount() >= 500000) { System.out.println("主管财务校领导审批通过,金额:" + request.getAmount()); } else { if (nextApprover != null) { nextApprover.approve(request); } } } } // 请求类 class Request { private int amount; private String type; public Request(int amount, String type) { this.amount = amount; this.type = type; } public int getAmount() { return amount; } public String getType() { return type; } } // 客户端代码 public class Main { public static void main(String[] args) { Approver leader = new LeaderApprover(); Approver function = new FunctionApprover(); Approver leader2 = new LeaderApprover2(); Approver leader3 = new LeaderApprover3(); leader.setNextApprover(function); function.setNextApprover(leader2); leader2.setNextApprover(leader3); Request request1 = new Request(30000, "学院经费"); Request request2 = new Request(80000, "学院经费"); Request request3 = new Request(150000, "学院经费"); Request request4 = new Request(700000, "学院经费"); leader.approve(request1); leader.approve(request2); leader.approve(request3); leader.approve(request4); } } ``` (2)生活中可以用到职责模式的场景: 在公司中,如果员工需要申请一些费用报销,通常需要经过多个领导的审批,例如直接主管、部门负责人、财务主管等。这种情况下,我们可以使用职责模式来实现审批流程,使得每个领导只需要关注自己的审批权限,大大简化了审批流程,并且使得整个流程更加规范和可控。 职责模式的优点是可以使得请求的发送者和接收者解耦,请求发送者不需要知道请求的处理细节,只需要将请求发送给第一个处理者即可,处理者之间也是松耦合的关系,可以方便地进行组合和扩展。职责模式的缺点是可能会导致请求被多次处理,如果处理者之间没有合理地进行协调,容易出现请求处理的重复和遗漏。

相关推荐

最新推荐

recommend-type

合作式智能运输系统车用通信系统应用层及应用数据交互标准(第二阶段).pdf

请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。 本标准由中国智能交通产业联盟(C-ITS) 提出并归口。 本标准起草单位:北京星云互联科技有限公司、电信科学技术研究院有限公司、...
recommend-type

国家标准《信息安全技术 政府网站系统安全指南》(征求意见稿)修订编制说明.docx

根据《全国信息安全标准化技术委员会关于2019年网络安全标准项目立项的通知》(信安秘字[2019]050号),该项目由全国信息安全标准化技术委员会提出,全国信息安全标准化技术委员会归口,由北京信息安全测评中心负责...
recommend-type

M2M平台设备规范接口要求、性能要求、可靠性要求

本规范主要包括以下几个方面的内容:移动M2M平台业务功能要求、网管要求、接口要求、性能要求、可靠性要求、安全性要求以及软硬件和环境要求等。 本规范由中国移动通信有限公司集团客户部归口管理。 本规范解释权...
recommend-type

DB42T455-2008湖北省电子政务纵向网络组网规范.doc

本部分由湖北省标准化协会电子政务专业委员会归口。 本部分主要起草单位:武汉大学计算机学院、湖北省标准化研究院。 本部分参加起草单位:武汉大学电子政务研究中心、湖北全达信息科技有限公司。
recommend-type

中国移动_NGBOSS1-BOSS技术规范V2

在NG1-BOSS(1.0)规范的基础上,保持两级中心的原则,继承三层结构的思想,以可复用性、可扩展性、业务灵活性为设计原则,定义中国移动省级BOSS系统的系统架构、系统边界和系统接口,并对系统关键性技术提出要求,...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。