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