Python 程式碼設計模式
阿新 • • 發佈:2020-08-28
責任鏈模式 (場景:OA系統,專案審批...)
使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。
適用性:
有多個的物件可以處理一個請求,哪個物件處理該請求執行時刻自動確定。
程式碼示例:
流程審批,跟進需要審批的額度不同。需要的環節多少則不同
class BaseHandler(object): _superior = None '''處理基類''' def submit_to_superior(self, superior): # 向上級提交 # 設定上級處理人self._superior = superior class RequestHandlerL1(BaseHandler): '''第一級請求處理者''' name = "TeamLeader" def handle(self,request): if request < 500 : print("審批者[%s],請求金額[%s],審批結果[審批通過]"%(self.name,request)) else: print("\033[31;1m[%s]無權審批,交給下一個審批者\033[0m" %self.name) self._superior.handle(request) class RequestHandlerL2(BaseHandler): '''第二級請求處理者''' name = "DeptManager" def handle(self,request): if request < 5000 : print("審批者[%s],請求金額[%s],審批結果[審批通過]"%(self.name,request)) else: print("\033[31;1m[%s]無權審批,交給下一個審批者\033[0m" %self.name) self._superior.handle(request) class RequestHandlerL3(BaseHandler): '''第三級請求處理者''' name = "CEO" def handle(self,request): if request < 10000 : print("審批者[%s],請求金額[%s],審批結果[審批通過]"%(self.name,request)) else: print("\033[31;1m[%s]要太多錢了,不批\033[0m"%self.name) class RequestAPI(object): h1 = RequestHandlerL1() h2 = RequestHandlerL2() h3 = RequestHandlerL3() h1.submit_to_superior(h2) h2.submit_to_superior(h3) def __init__(self,name,amount): self.name = name self.amount = amount def handle(self): '''統一請求介面''' self.h1.handle(self.amount) if __name__ == "__main__": r1 = RequestAPI("Alex", 50000) r1.handle() print(r1.__dict__)