Python設計模式-職責鏈模式
Python設計模式-職責鏈模式
程式碼基於3.5.2,程式碼如下;
#coding:utf-8
#職責鏈模式
class Handler():
def __init__(self):
self.successor = None
def setSuccseeor(self,successor):
self.successor = successor
def handleRequest(self,request):
raise NotImplementedError
class ConcreteHandle1(Handler):
def handleRequest(self,request):
if request >=0 and request <10:
print("ConcreteHandle1 處理了 {0}".format(request))
else:
if self.successor != None:
self.successor.handleRequest(request)
else:
print("沒有對應物件處理該請求")
class ConcreteHandle2(Handler):
def handleRequest(self,request):
if request >=10 and request <20:
print("ConcreteHandle2 處理了 {0}".format(request))
else:
if self.successor != None:
self.successor.handleRequest(request)
else:
print("沒有對應物件處理該請求")
class ConcreteHandle3(Handler):
def handleRequest(self,request):
if request >=20 and request <30:
print("ConcreteHandle3 處理了 {0}".format(request))
else:
if self.successor != None:
self.successor.handleRequest(request)
else:
print("沒有對應物件處理該請求")
if __name__ == "__main__":
c1 = ConcreteHandle1()
c2 = ConcreteHandle2()
c3 = ConcreteHandle3()
c2.setSuccseeor(c1)
c3.setSuccseeor(c2)
c3.handleRequest(8)
c3.handleRequest(12)
c3.handleRequest(24)
c3.handleRequest(50)
職責鏈模式分析與解讀
職責鏈模式
職責鏈模式,使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。
程式碼解讀
1、先定義了Handler類,所以繼承該類的類需要實現handleRequest方法,並且setSuccseeor方法為設定噹噹前物件無法處理該請求時,處理該請求的下一級物件;
2、定義了三個繼承自Handler類的ConcreteHandle1,ConcreteHandle2和ConcreteHandle3,分別實現了handleRequest方法,通過判讀輸入request來判斷是否可以處理該請求;
3、在客戶端呼叫時,通過將例項c1,c2,c3,通過setSuccseeor方法來設定處理請求的上一級從而使得三個例項構成一條處理鏈,此時的入口例項便是c3,通過將請求出入c3的handleRequest方法,從而完成請求的傳遞。
程式碼執行結果如下:
”’
ConcreteHandle1 處理了 8
ConcreteHandle2 處理了 12
ConcreteHandle3 處理了 24
沒有對應物件處理該請求
”’
職責鏈模式應用場景:
1、若一個請求可能由一個懟請求有鏈式優先順序的處理群所處理時,可以考慮責任鏈模式。
優缺點分析
優點
1、將請求者與處理者分離,請求者並不知道請求是被哪個處理者所處理,易於擴充套件,降低了耦合度;
2、隨時地增加或修改處理一個請求的結構,增強了給物件指派職責的靈活性。
缺點
1、如果責任鏈比較長,會有比較大的效能問題;在業務出問題時,難定位是哪個處理者的問題。
相關文章
- 設計模式-職責鏈模式設計模式
- 設計模式之-職責鏈模式設計模式
- 設計模式之【職責鏈模式】設計模式
- 設計模式系列 12– 職責鏈模式設計模式
- 簡說設計模式——職責鏈模式設計模式
- Javascript設計模式之職責鏈模式JavaScript設計模式
- JS設計模式五:職責鏈模式JS設計模式
- javascript設計模式 之 10 職責鏈模式JavaScript設計模式
- C#設計模式之職責鏈模式C#設計模式
- 設計模式-職責鏈模式(Chain of Responsibility)設計模式AI
- 設計模式(十六)職責鏈模式(Chain of Responsibility)設計模式AI
- PHP實現職責鏈設計模式PHP設計模式
- 實話設計模式之:職責鏈設計模式
- 職責鏈模式模式
- 軟體設計模式學習(十七)職責鏈模式設計模式
- (轉)職責鏈設計模式(Chain of Responsibility)設計模式AI
- C++設計模式——職責鏈模式( Chain of Responsibility Pattern)C++設計模式AI
- C#設計模式系列:職責鏈模式(Chain of Responsibility)C#設計模式AI
- JAVA設計模式之 職責鏈模式【Chain of Responsibility Pattern】Java設計模式AI
- c/c++ 設計模式-----職責鏈(Chain Of Responsibility)模式C++設計模式AI
- 設計模式 —— 責任鏈模式設計模式
- 設計模式-責任鏈模式設計模式
- 設計模式(責任鏈模式)設計模式
- 設計模式——責任鏈模式設計模式
- 設計模式的征途—14.職責鏈(Chain of Responsibility)模式設計模式AI
- 《JavaScript設計模式與開發實踐》模式篇(10)—— 職責鏈模式JavaScript設計模式
- 設計模式(三) 責任鏈模式設計模式
- 設計模式(十四) 責任鏈模式設計模式
- 設計模式(十八):責任鏈模式設計模式
- 設計模式之——責任鏈模式設計模式
- 設計模式之責任鏈模式設計模式
- 設計模式 - 單一職責設計模式
- 設計模式(二十四)——職責鏈模式(SpringMVC原始碼分析)設計模式SpringMVC原始碼
- PHP 設計模式之責任鏈模式PHP設計模式
- 設計模式系列之「責任鏈模式」設計模式
- JAVA設計模式之責任鏈模式Java設計模式
- 極簡設計模式-責任鏈模式設計模式
- 職責鏈模式(chain of responsibility)模式AI