责任链模式的类,也是大开眼界啊~~~ https://www.cnblogs.com/alex3714/p/5760582.html
通过每个子类定义一个_successer 来关联自己的下一个人是谁.
当审批每一层为一个对象时,
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 = successor11 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 = name59 self.amount = amount60 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}
但审批每一层为多个对象时,但是还需要具体场景。
但是感觉只需要把 BaseHandler 的 self._successor.append(successor), 然后把每一个子类的handle做遍历处理,应该就可以了~~~
这个需要具体问题具体分析,不过这种通过定义使得子类有关联关系的方法,还是很不错的想法~~~又学一招~~~完美~~哈哈