首页 > 其他分享 >35

35

时间:2025-01-06 23:59:16浏览次数:5  
标签:name request 35 PurchaseRequest handleRequest public successor

实验15:职责链模式

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

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

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

 

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

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

实验要求:

1. 提交类图;

 

2. 提交源代码;

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);

    }

 

    @Override

    public 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);

    }

 

    @Override

    public 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);

    }

 

    @Override

    public 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);

    }

 

    @Override

    public 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);

    }

}

3. 注意编程规范。

 

 

标签:name,request,35,PurchaseRequest,handleRequest,public,successor
From: https://www.cnblogs.com/wanbeibei/p/18656544

相关文章

  • 【235. 二叉搜索树的最近公共祖先 中等】
    题目:给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root......
  • 【PostgreSQL数据库-Tried to send an out-of-range integer as a 2-byte value: 5356
    业务侧反馈,因为某业务积攒的单量太大,导致在数据批量入库的时候,产生如下报错,主要报错信息是:请求参数的整体大小不能超过2byte。Triedtosendanout-of-rangeintegerasa2-bytevalue:53568这个报错初步看起来,有个“out-of-rangeinteger”,可能大家第一个想到的可能......
  • DRV8353RS芯片驱动程序的实现
    目录概述1.硬件接口定义1.1DRV8353RS的SPI控制模块 1.2 时序介绍1.3 数据格式2驱动代码实现2.1STM32Cube配置接口2.2驱动程序实现 2.2.1接口函数实现 2.2.2default参数配置 2.2.3初始化函数 2.2.4读取状态函数3驱动程序测试3.1参数初始化3.2......
  • 程序员如何培养技术领导力?实现从码农向领导者的转型,解除35岁魔咒
    各位程序员!在代码世界埋头苦干时,是否憧憬过引领技术潮流、带团队冲锋?技术领导力并非天生,大多需要后天练就。从精通前沿技术到巧妙拆解难题,靠硬实力奠基;但学会倾听队友想法、精准分配任务、激励团队斗志,更是进阶“秘籍”。如何在攻坚项目里让大家拧成一股绳?怎样用技术视野规划......
  • Linux系统更换开机logo方法教程,触觉智能RK3562开发板演示
    本文介绍Linux系统更换开机logo方法教程,通用RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必......
  • 35岁退休
    各位兄弟姐妹们,最近又听到“35岁即失业”这话了吧?特别是在我们程序员这个圈子。说实话,这话题确实让人有点心慌,但咱们必须认真对待这个问题,提前做好准备,而不是被它吓倒,然后劝退所有年轻人。还记得当初我决定打造自己的低代码平台时,身边的朋友都不理解:好好的工作不干,干嘛非要冒......
  • 【RK3588 Linux 5.x 内核编程】-Misc设备驱动
    Misc设备驱动文章目录Misc设备驱动1、什么是Misc设备驱动2、Misc驱动API2.1Misc设备结构2.2注册Misc设备2.3注销Misc设备3、驱动实现4、驱动测试本文将详细介绍Linux内核中的Misc驱动。1、什么是Misc设备驱动MiscDriver是杂项设备的杂项驱......
  • 瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)
    瑞芯微rk3568平台openwrt系统适配ffmpeg硬件解码(rkmpp)RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装libdrmlibdrm-2.4.89make方式编译(cannotfind-lcairo,不推荐)下载源码编译编译错误:multipledefinitionof`nouveaudebug‘错误cannotfi......
  • 【RK3588 Linux 5.x 内核编程】-内核SPI子系统
    内核SPI子系统文章目录内核SPI子系统1、SPI子系统2、内核中的SPI协议驱动程序2.1获取SPI控制器驱动程序2.2将从设备添加到SPI控制器2.3配置SPI2.4数据传输2.5删除设备3、驱动实现SPI是流行的串行通信协议之一。SPI(SerialPeripheral......
  • 国产高性能CPU米尔瑞芯微RK3576赋能AIoT、工业、智能显示终端
    随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的AIOT,为了有更好的用户体验,CPU的算力就要求更高了。 今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。 关于RK3576处理器 国产CPU,是这些年的骄傲,华为手机全国产化,国人......