10.17

实验15:职责链模式

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

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

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

 

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

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

实验要求:

1. 提交类图;

 

2. 提交源代码;

from abc import ABC, abstractmethod


# 采购请求类
class PurchaseRequest(ABC):
    def __init__(self, amount):
        self.amount = amount

    def getAmount(self):
        return self.amount


# 审批者抽象类
class Approver(ABC):
    def __init__(self):
        self.successor = None

    def setSuccessor(self, successor):
        self.successor = successor

    @abstractmethod
    def processRequest(self, request):
        pass


# 主任审批类
class Director(Approver):
    def processRequest(self, request):
        if request.getAmount() <= 10000:
            print(f"主任审批通过了金额为{request.getAmount()}元的采购单。")
        elif self.successor:
            self.successor.processRequest(request)


# 部门经理审批类
class DepartmentManager(Approver):
    def processRequest(self, request):
        if request.getAmount() <= 50000:
            print(f"部门经理审批通过了金额为{request.getAmount()}元的采购单。")
        elif self.successor:
            self.successor.processRequest(request)


# 副总经理审批类
class ViceGeneralManager(Approver):
    def processRequest(self, request):
        if request.getAmount() <= 100000:
            print(f"副总经理审批通过了金额为{request.getAmount()}元的采购单。")
        elif self.successor:
            self.successor.processRequest(request)


# 总经理审批类
class GeneralManager(Approver):
    def processRequest(self, request):
        if request.getAmount() <= 200000:
            print(f"总经理审批通过了金额为{request.getAmount()}元的采购单。")
        elif self.successor:
            self.successor.processRequest(request)


# 职工大会审批类
class StaffMeetingApproval(Approver):
    def processRequest(self, request):
        print(f"金额为{request.getAmount()}元的采购单需开职工大会确定。")


if __name__ == "__main__":
    # 创建审批者链
    director = Director()
    department_manager = DepartmentManager()
    vice_general_manager = ViceGeneralManager()
    general_manager = GeneralManager()
    staff_meeting_approval = StaffMeetingApproval()

    director.setSuccessor(department_manager)
    department_manager.setSuccessor(vice_general_manager)
    vice_general_manager.setSuccessor(general_manager)
    general_manager.setSuccessor(staff_meeting_approval)

    # 创建采购请求实例并进行审批流程
    purchase_request_1 = PurchaseRequest(8000)
    director.processRequest(purchase_request_1)

    purchase_request_2 = PurchaseRequest(30000)
    director.processRequest(purchase_request_2)

    purchase_request_3 = PurchaseRequest(80000)
    director.processRequest(purchase_request_3)

    purchase_request_4 = PurchaseRequest(150000)
    director.processRequest(purchase_request_4)

    purchase_request_5 = PurchaseRequest(250000)
    director.processRequest(purchase_request_5)

 

3. 注意编程规范。

 

 

posted @ 2024-11-27 08:20  The-rich  阅读(15)  评论(0)    收藏  举报