首页 > 其他分享 >实验十五

实验十五

时间:2024-11-13 10:02:00浏览次数:1  
标签:self Approver request PurchaseRequest 实验 十五 import successor

 

实验15:职责链模式

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

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

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

 

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

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

实验要求:

1. 类图:

 

 

2. 源代码:

PurchaseRequest.py 采购请求类

 

 class PurchaseRequest:

    def __init__(self, number, amount):

        self.number = number

        self.amount = amount

 

    def get_number(self):

        return self.number

 

    def get_amount(self):

        return self.amount

 

 

 Approver.py  审批者抽象类

 

 class Approver:

    def __init__(self):

        self._successor = None

 

    def set_successor(self, successor):

        self._successor = successor

 

    def process_request(self, request):

        raise NotImplementedError("Subclasses must implement this method.")

 

 

Director.py  主任类

 

 from Approver import Approver

from PurchaseRequest import PurchaseRequest

 

class Director(Approver):

    def process_request(self, request: PurchaseRequest):

        if request.get_amount() <= 10000:

            print(f"主任审批采购单,单号:{request.get_number()}")

        elif self._successor:

            self._successor.process_request(request)

 

 

 Manager.py  部门经理类

 

from Approver import Approver

from PurchaseRequest import PurchaseRequest

 

class Manager(Approver):

    def process_request(self, request: PurchaseRequest):

        if request.get_amount() <= 50000:

            print(f"部门经理审批采购单,单号:{request.get_number()}")

        elif self._successor:

            self._successor.process_request(request)

 

VicePresident.py 副总经理类

 

 from Approver import Approver

from PurchaseRequest import PurchaseRequest

 

class VicePresident(Approver):

    def process_request(self, request: PurchaseRequest):

        if request.get_amount() <= 100000:

            print(f"副总经理审批采购单,单号:{request.get_number()}")

        elif self._successor:

            self._successor.process_request(request)

 

President.py  总经理类

 

 from Approver import Approver

from PurchaseRequest import PurchaseRequest

 

class President(Approver):

    def process_request(self, request: PurchaseRequest):

        if request.get_amount() <= 200000:

            print(f"总经理审批采购单,单号:{request.get_number()}")

        elif self._successor:

            self._successor.process_request(request)

 

 Congress.py 职工大会类

 

 from Approver import Approver

from PurchaseRequest import PurchaseRequest

 

class Congress(Approver):

    def process_request(self, request: PurchaseRequest):

        print(f"职工大会审批采购单,单号:{request.get_number()}")

 

 

Main.py 客户端类

 

 from Director import Director

from Manager import Manager

from VicePresident import VicePresident

from President import President

from Congress import Congress

from PurchaseRequest import PurchaseRequest

 

def main():

    director = Director()

    manager = Manager()

    vice_president = VicePresident()

    president = President()

    congress = Congress()

 

    director.set_successor(manager)

    manager.set_successor(vice_president)

    vice_president.set_successor(president)

    president.set_successor(congress)

 

    request1 = PurchaseRequest(1, 8000)

    request2 = PurchaseRequest(2, 30000)

    request3 = PurchaseRequest(3, 90000)

    request4 = PurchaseRequest(4, 150000)

    request5 = PurchaseRequest(5, 250000)

 

    director.process_request(request1)

    director.process_request(request2)

    director.process_request(request3)

    director.process_request(request4)

    director.process_request(request5)

 

if __name__ == "__main__":

    main()

 

 

 

 

标签:self,Approver,request,PurchaseRequest,实验,十五,import,successor
From: https://www.cnblogs.com/aixin52129211/p/18543219

相关文章

  • 实验16:命令模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。 [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集......
  • 实验17:解释器模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构;2、能够利用解释器模式解决实际问题。 [实验任务一]:解释器模式某机器人控制程序包含一些简单的英文指令,其文法规则如下:expression::=directionactiondistance|compos......
  • 上机实验:数据准备与模型评估
    1、实验目的熟悉Python的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;加深对训练集、测试集、N折交叉验证、模型评估标准的理解。2、实验内容(1)利用pandas库从本地读取iris数据集;(2)从scikit-learn库中直接加载iris数据集;(3)实现五折交叉验证进行模型......
  • 环境变量提权实验
    环境变量提权PATH是Linux和Unix操作系统中的环境变量,它指定所有存储可执行程序的bin和sbin目录。当用户在终端中执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin目录,以便系统管理命令的执行。环......
  • 数据采集实验四
    作业一(1)实验内容要求熟练掌握Selenium查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。候选网站东方财富网输出信息MYSQL......
  • MIT 操作系统实验问题记录
    Linux连接vscodeRemote-SSH设置:在实验环境搭建时只用官网提供的是不够的还需要安装在gitpush到远程仓库的过程中由于clone时用的是url=git://g.csail.mit.edu/xv6-labs-2020这个所以得创建一个新的分支来向远程仓库pushgitremoteaddgiteehttps://gitee.com/zhang......
  • C++数据结构实验题目解析
    目录题目:考点分析:难点1:就地逆置步骤:代码实现:核心代码详细解释:难点2:①非递减链表,②删除相同元素代码详解①:代码详解②:完整代码:大家好,今天我就来给大家分析一下我上期分享的题目的详细解析,编程的能力都是逐步提升的,但是思维的锻炼可以提前进行,这样有助于我们以后自......
  • 学习笔记(三十五):[email protected] (线性容器ArrayList)
    概述:一种线性数据结构,底层基于数组实现 一、导入import{ArrayList}from'@kit.ArkTS'; 二、定义letarrayList:ArrayList<string|number>=newArrayList(); 三、常用函数1、add,在ArrayList尾部插入元素 2、insert,在长度范围内任意位置插入指定元素......
  • 实验05多重循环---7-08 幸运彩票
    彩票的号码有6位数字,若一张彩票的前3位上的数之和等于后3位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。输入格式:输入在第一行中给出一个正整数N(≤100)。随后N行,每行给出一张彩票的6位数字。输出格式:对每张彩票,如果它是幸运的,就......
  • 20222301 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:①DNS注册人及联系方式②该域名对应IP地址③IP地址注册人及联系方式④IP地址所在国家、城市和具体地理位置(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所......