1
0
Fork 0
design-patterns/python/chain_of_responsibility/main.py

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======= 责任链模式结束 =======")