实验十五

 

实验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()

 

 

 

 

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

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

相关文章

原生代币转其他代币permit2不需要授权

采用0x进行bnb转usdt的时候不需要permit2,其他币转原生代币的时候需要permit2 curl --location --request GET https://api.0x.org/swap/permit2/quote?chainId=56&sellToken=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&buyToken=0x55d398326f99059ff77548524699902…

FANUC发那科工业机器人减速器维修小细节

在现代工业生产中,FANUC发那科机器人已成为不可或缺的一部分。然而,随着时间的推移,发那科机械手减速器可能会出现故障,影响机器人的正常工作。 一、了解减速器的结构与工作原理 在开始FANUC发那科机器人维修之前,了解减速器的结构与工作原理至关重要。FANUC发那科机器人减…

太强了!14.7K star!Windows系统居然还有开源替代版了?!

在操作系统的世界里,Windows 系统一直占据着重要的地位。然而,你可能不知道的是,还有一个拥有 14.7K star 的开源替代版 ——ReactOS。 1、ReactOS 介绍 ReactOS 是一个自由开源的操作系统,其目标是实现与 Windows 系统在二进制级别上的兼容。这意味着,我们可以在这个系统…

HuggingFace 核心组件及应用实战

带着问题来学习什么是Hugging Face?它的目标是什么?Hugging Face 中包含哪些知名的预训练模型?如果我们要在 Hugging Face 中下载 BERT,那么只有一种版本,还是有多种版本可以选择?每一种版本的 BERT 中,只有一种格式还是有多种格式可以适应多种下游任务?Hugging Face 库…

AllPairs工具助力正交表测试用例设计

AllPairs工具助力正交表测试用例设计 正交表法是一种高效的测试方法,特别适用于软件测试中需要处理多个控件及其多种取值组合的情况。以下是对正交表法的详细解释: 一、正交表法概述 正交表法是一种利用正交表来设计测试用例的方法,旨在通过较少的测试次数达到较高的测试覆盖…

SAM4MLLM:结合多模态大型语言模型和SAM实现高精度引用表达分割 | ECCV24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: SAM4MLLM: Enhance Multi-Modal Large Language Model for Referring Expression Segmentation论文地址:https://arxiv.org/abs/2409.10542 论文代码:https://github.com/AI-Application-and-Integration-Lab/SAM4MLLM…

信息时代的安全堡垒:500强企业数据安全传输案例解析

数据安全传输,这个是数据安全里一个比较细分的领域,但是包括的传输场景也是很多的,比如隔离网之间的跨网文件传输、企业内外部之间的文件安全外发、总分支之间的数据传输分发、信创环境下的高性能传输、机台等设备的数据采集传输、业务系统之间的自动化传输同步等等。 每家企…

Ubuntu 22.04 LTS 离线安装 Harbor v2.11 (附https认证,Trivy镜像扫描)

Harbor 介绍Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;"。可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开…

reposync离线yum源

系统:open Euler 22.03-sp3-x86 reposync ;createrepo 1、配置好yum源 2、下载 下载指定repo到指定目录reposync --repoid EPOL -p /data/EPOL 3、制作镜像仓库cd EPOLcreaterepo .

叮咚!您有一份跨网域跨安全域文件传输方案待查收

跨网域跨安全域文件传输,在很多企业和机构里面,都会存在这样的场景的,比如企业内部会用网络隔离的方式,划分不同的安全域和网段,或者有些机构还有不同的分支机构,就会有不同地域的文件传输需求。 跨网域跨安全域传输的典型应用场景 跨网域跨安全域文件传输的典型应用场景…

rtthread源码completion.c no such file or dir

20241113 从gitee下载rtthread源码,bsp--->stm32--->stm32f407-atk-explorer直接编译报错,如下从百度网盘下载rtthread源码,bsp--->stm32--->stm32f407-atk-explorer编译正常,无错误如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为…