【python 類】【部分轉發】設計模式 -- 責任鏈模式 (類之間的聯動)

責任鏈模式的類,也是大開眼界啊~~~ 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

相關文章
相關標籤/搜索