实验15:职责链模式

news/2024/11/14 8:34:47/文章来源:https://www.cnblogs.com/yuanxinglan/p/18542501

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

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

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

 

[实验任务一]:财务审批

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

实验要求:

1. 提交类图;

2. 提交源代码;

3. 注意编程规范。

1类图

 

源代码

package org.example;

public class Client {
    public static void main(String[] args) {
        Leader objDirector,objDepartmentManager,objViceManager,objGeneralManager;
        objDirector = new Director("张主任");
        objDepartmentManager = new DepartmentManager("刘部门经理");
        objViceManager = new ViceManager("王副经理");
        objGeneralManager = new GeneralManager("赵经理");
        //设置上级
        objDirector.setSuccessor(objDepartmentManager);
        objDepartmentManager.setSuccessor(objViceManager);
        objViceManager.setSuccessor(objGeneralManager);
 
        ShoppingRequest shoppingRequest1 = new ShoppingRequest("买打印纸",1000);
        ShoppingRequest shoppingRequest2 = new ShoppingRequest("购置电脑",20000);
        ShoppingRequest shoppingRequest3 = new ShoppingRequest("购置空调",80000);
        ShoppingRequest shoppingRequest4 = new ShoppingRequest("办公室装修",160000);
        ShoppingRequest shoppingRequest5 = new ShoppingRequest("收购XX公司",1000000);
 
        objDirector.handleRequest(shoppingRequest1);
        System.out.println("");
        objDirector.handleRequest(shoppingRequest2);
        System.out.println("");
        objDirector.handleRequest(shoppingRequest3);
        System.out.println("");
        objDirector.handleRequest(shoppingRequest4);
        System.out.println("");
        objDirector.handleRequest(shoppingRequest5);
        System.out.println("");
    }
}

package org.example;

class DepartmentManager extends Leader{
    public DepartmentManager(String name) {
        super(name);
    }
    protected void handleRequest(ShoppingRequest request) {
        if (request.getBillMoney()<50000.00){
            System.out.println(name + "部门经理处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元");
        } else {
            if (this.successor != null){
                this.successor.handleRequest(request);
            }
        }
    }
}

package org.example;

class Director extends Leader{
    public Director(String name) {
        super(name);
    }
    public void handleRequest(ShoppingRequest request){
        if (request.getBillMoney()<10000.00){
            System.out.println(name + "主任处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元");
        } else {
            if (this.successor != null){
                this.successor.handleRequest(request);
            }
        }
    }
}

package org.example;

class GeneralManager extends Leader{
    public GeneralManager(String name) {
        super(name);
    }
    @Override
    protected void handleRequest(ShoppingRequest request) {
        if (request.getBillMoney()<200000.00){
            System.out.println(name + "总经理处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元");
        } else {
            System.out.println("董事会将开会处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元");
        }
    }
}

package org.example;

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;
    }
    protected abstract void handleRequest(ShoppingRequest request);
}

package org.example;

public class ShoppingRequest {
    private String shoppingReason;
    private double billMoney;
    public ShoppingRequest(String shoppingReason,double billMoney){
        this.shoppingReason = shoppingReason;
        this.billMoney = billMoney;
    }
    public String getShoppingReason() {
        return shoppingReason;
    }
    public void setShoppingReason(String shoppingReason) {
        this.shoppingReason = shoppingReason;
    }
    public double getBillMoney() {
        return billMoney;
    }
    public void setBillMoney(double billMoney) {
        this.billMoney = billMoney;
    }
}

package org.example;

class ViceManager extends Leader{
    public ViceManager(String name) {
        super(name);
    }
    @Override
    protected void handleRequest(ShoppingRequest request) {
        if (request.getBillMoney()<100000.00){
            System.out.println(name + "副经理处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元");
        } else {
            if (this.successor != null){
                this.successor.handleRequest(request);
            }
        }
    }
}

 

 

3、运行截图

 

 

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

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

相关文章

题解:[JOISC 2021 Day4] イベント巡り 2 (Event Hopping 2)

P7562 [JOISC 2021 Day4] イベント巡り 2 (Event Hopping 2) lxl 上课讲了这题,我听了选取答案区间的思路,恍然大雾 ,于是就有了这篇题解—— sto lxl orz !!!本题解主要详解区间选取。 前置知识:倍增策略 首先,本题的 \(L_i\)、\(R_i\) 较大,离散化即可。 另外,我个…

团队作业4——项目冲刺-2

团队作业4——项目冲刺-2信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 小飞棍团队对需求改进和系统设计进行讨论GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗振烘(组长) 3122004748庄崇立 3122004633李响 3121002802何昌洲…

实验14:代理模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解代理模式的动机,掌握该模式的结构; 2、能够利用代理模式解决实际问题。[实验任务一]:婚介所 婚介所其实就是找对象的一个代理,请仿照我们的课堂例子“论坛权限控制代理”完成这个实际问题,其中如果年纪…

Bulk-Crap-Uninstaller:一个高效卸载,轻松管理你的应用程序的.Net开源工具

我们在工作中,经常需要安装大量的软件,随着应用程序的不断增多,管理这些软件变得非常困难。 下面介绍一款具备高效、简洁的特点,可以帮助我们快速卸载大量不需要的应用程序,让电脑管理变得更加轻松。01 项目简介 Bulk-Crap-Uninstaller是一款开源的软件卸载工具,基于.Net…

绘制3D架构图,原来这么简单

在软件开发的世界里,架构图是系统设计的蓝图,它们不仅帮助团队理解系统的整体结构,还能提升沟通效率,确保项目的顺利推进。然而,绘制一张清晰、直观的架构图,往往需要大量时间和专业工具。面对繁琐的操作和复杂的学习曲线,不少程序员感到力不从心。 之前DD有给大家推荐过…

AI千恋万花(java调用api实现)附完整项目及注释)重置版)

感觉博客的第一版质量有点低下了,删了重置一下,希望能给其他人的代码带来一些灵感前情提要:https://www.cnblogs.com/h4o3/p/18523151 由于是匆忙制作的老婆系统,主界面已经菠萝菠萝哒。(有点廉价) 注册和登录功能用了MySQL实现(其实没什么卵用,为了顺手交个作业临时加…

鲲鹏V10安装人大金仓

1.下载人大金仓数据库 https://www.kingbase.com.cn/xzzx/index.htm 2.创建安装用户 useradd kingbase#将安装包权限赋予kingbase用户chown -R kingbase:kingbase /home/kingbase#创建安装目录并赋权mkdir -p /usr/local/apps/KingbaseESmkdir -p /usr/local/apps/Kingbasechow…

centos7安装elasticsearch:7.9.3

服务器安装elasticsearch:7.9.3 一、安装前准备检查系统环境:确保CentOS 7系统已经更新到最新版本。 检查系统的硬件资源,确保满足Elasticsearch的安装和运行要求。安装OpenJDK:Elasticsearch需要Java环境,这里选择安装OpenJDK 11。 使用命令sudo yum install java-11-open…

Golang 编译windows应用程序

因为我们更喜欢在Linux上开发程序, 所以生成交叉编译器,以便在Linux上交叉编译出windows程序。 安装minGW:在Linux上运行gcc交叉编译生成windows程序 我们用到Cgo,因此需要安装 C 语言交叉编译器 sudo apt-get install gcc-mingw-w64 下载Go语言的源代码 git clone https:/…

The platform metadata area could not be written: /Volumes/MemoryAnalyzer1/MemoryAnalyzer.app/Content

mac安装MAT报错:The platform metadata area could not be written: /Volumes/MemoryAnalyzer1/MemoryAnalyzer.app/Content 。。。。。解决:创建文件夹 /Users/mzj/storage/data/mat/data

Centos7安装部署Nagios

简介 Nagios 是一款自动化运维工具,可以协助运维人员监控服务器的运行状况,并且拥有报警功能。 1、Nagios 核心及插件将安装在/usr/local/nagios 2、Nagios 核心会配置好监控当前服务器的一些基本信息 仅供参考,记录一下centOS7下nagios配置步骤,完整的步骤以及原理请参照原…

全媒体数字化转型,业务和技术双管齐下

不少传媒企业已经开始积极探索转型之路。通过打造个性IP工作室、重视C端用户服务、深化G端合作等方式,传媒行业正在逐步构建起一个以用户为中心、以数据为驱动、以创新为核心的新型媒体生态。2024年,是我国全功能接入国际互联网30周年。 在这个特殊的年份,中国的传媒行业也同…