【python 类】【部分转发】设计模式 -- 责任链模式 (类之间的联动)

责任链模式的类,也是大开眼界啊~~~ 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 = 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}
每一个审批层为单独对象

 

 

但审批每一层为多个对象时,但是还需要具体场景。

但是感觉只需要把 BaseHandler 的 self._successor.append(successor), 然后把每一个子类的handle做遍历处理,应该就可以了~~~

 

这个需要具体问题具体分析,不过这种通过定义使得子类有关联关系的方法,还是很不错的想法~~~又学一招~~~完美~~哈哈

 

posted @ 2019-02-26 14:57  小小Guido妹  阅读(205)  评论(0编辑  收藏  举报