实现责任链模式示例,添加经理类及相关方法,增强代码可读性
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
"""
|
||||
实例:
|
||||
汤宝宝申请报销款,需要走产品经理、部门经理和总经理的审核~
|
||||
"""
|
||||
|
||||
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======= 责任链模式结束 =======")
|
||||
Reference in New Issue
Block a user