责任链模式的类,也是大开眼界啊~~~ https://www.cnblogs.com/alex3714/p/5760582.htmlhtml
经过每一个子类定义一个_successer 来关联本身的下一我的是谁.python
当审批每一层为一个对象时,app
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 5 class BaseHandler(object): 6 '''处理基类''' 7 8 def successor(self, successor): 9 # 与下一个责任者关联 10 self._successor = successor 11 12 13 class RequestHandlerL1(BaseHandler): 14 '''第一级请求处理者''' 15 name = "TeamLeader" 16 17 def handle(self, request): 18 if request < 500: 19 print("审批者[%s],请求金额[%s],审批结果[审批经过]" % (self.name, request)) 20 else: 21 print("\033[31;1m[%s]无权审批,交给下一个审批者\033[0m" % self.name) 22 self._successor.handle(request) 23 24 25 class RequestHandlerL2(BaseHandler): 26 '''第二级请求处理者''' 27 name = "DeptManager" 28 29 def handle(self, request): 30 if request < 5000: 31 print("审批者[%s],请求金额[%s],审批结果[审批经过]" % (self.name, request)) 32 else: 33 print("\033[31;1m[%s]无权审批,交给下一个审批者\033[0m" % self.name) 34 self._successor.handle(request) 35 36 37 class RequestHandlerL3(BaseHandler): 38 '''第三级请求处理者''' 39 name = "CEO" 40 41 def handle(self, request): 42 if request < 10000: 43 print("审批者[%s],请求金额[%s],审批结果[审批经过]" % (self.name, request)) 44 else: 45 print("\033[31;1m[%s]要太多钱了,不批\033[0m" % self.name) 46 # self._successor.handle(request) 47 48 49 class RequestAPI(object): 50 h1 = RequestHandlerL1() 51 h2 = RequestHandlerL2() 52 h3 = RequestHandlerL3() 53 54 h1.successor(h2) 55 h2.successor(h3) 56 57 def __init__(self, name, amount): 58 self.name = name 59 self.amount = amount 60 61 def handle(self): 62 '''统一请求接口''' 63 self.h1.handle(self.amount) 64 65 66 if __name__ == "__main__": 67 r1 = RequestAPI("Alex", 30000) 68 r1.handle() 69 print(r1.__dict__) 70 # [TeamLeader]无权审批, 交给下一个审批者 71 # [DeptManager]无权审批, 交给下一个审批者 72 # [CEO] 要太多钱了, 不批 73 # {'name': 'Alex', 'amount': 30000}
但审批每一层为多个对象时,可是还须要具体场景。ide
可是感受只须要把 BaseHandler 的 self._successor.append(successor), 而后把每个子类的handle作遍历处理,应该就能够了~~~spa
这个须要具体问题具体分析,不过这种经过定义使得子类有关联关系的方法,仍是很不错的想法~~~又学一招~~~完美~~哈哈code