63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
"""
|
|
实例:
|
|
汤宝宝申请报销款,需要走产品经理、部门经理和总经理的审核~
|
|
"""
|
|
|
|
class Manager:
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.successor = None
|
|
self.amount = 0
|
|
|
|
def set_successor(self, manager: 'Manager'):
|
|
self.successor = manager
|
|
print(f"{self.name}的下一级经理是{manager.name}")
|
|
|
|
def set_amount_right(self, amount: float):
|
|
self.amount = amount
|
|
print(f"{self.name}的报销权限是{amount:.2f}元")
|
|
|
|
def have_right(self, amount: float) -> bool:
|
|
right = amount <= self.amount
|
|
if right:
|
|
print(f"{self.name}有权限审批{amount:.2f}元的报销请求")
|
|
else:
|
|
print(f"{self.name}没有权限审批{amount:.2f}元的报销请求")
|
|
return right
|
|
|
|
def approve(self, name:str, amount: float):
|
|
print(f"{name}提交了一笔{amount:.2f}元的报销请求")
|
|
if self.have_right(amount):
|
|
print(f"{self.name}审批通过了{name}的报销请求,金额为{amount:.2f}元")
|
|
elif self.successor:
|
|
print(f"{self.name}将{name}的报销请求上报给{self.successor.name}审批")
|
|
self.successor.approve(name, amount)
|
|
else:
|
|
print(f"没有合适的经理审批{name}的报销请求,金额为{amount:.2f}元")
|
|
|
|
if __name__ == "__main__":
|
|
print("========= 责任链模式 =========")
|
|
|
|
# 创建经理
|
|
pm = Manager("产品经理")
|
|
pm.set_amount_right(1000)
|
|
dm = Manager("部门经理")
|
|
dm.set_amount_right(5000)
|
|
gm = Manager("总经理")
|
|
gm.set_amount_right(20000)
|
|
|
|
# 设置责任链
|
|
pm.set_successor(dm)
|
|
dm.set_successor(gm)
|
|
|
|
# 提交报销请求
|
|
print("-----")
|
|
pm.approve("汤宝宝", 800)
|
|
print("-----")
|
|
pm.approve("汤宝宝", 3000)
|
|
print("-----")
|
|
pm.approve("汤宝宝", 15000)
|
|
print("-----")
|
|
pm.approve("汤宝宝", 25000)
|
|
|
|
print("\n======= 责任链模式结束 =======") |