使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。
責任鏈模式的重點是在「鏈」上,將接收者物件連成一條鏈,並在該鏈上傳遞請求,直到有乙個接收者物件處理它。通過讓更多物件有機會處理請求,避免了請求傳送者和接收者之間的耦合。
責任鏈模式通用類圖:
請求和處理分開,遮蔽處理細節,兩者解耦,提高系統的靈活性。
有是效能問題,需要每個請求都是從鏈頭遍歷到鏈尾;除錯不很方便,特別是鏈條比較長,環節比較多的時候,由於採用了類似遞迴的方式,除錯的時候邏輯可能比較複雜。
鏈中節點數量需要控制,避免出現超長鏈的情況,一般的做法是在handler中設定乙個最大節點數量,在setnext方法中判斷是否已經是超過其閾值,超過則不允許該鏈建立,避免無意識地破壞系統效能。
責任鏈在spring中的應用:
核心類handlerexecutionchain類中的方法:
}// 責任鏈執行預處理方法,實則是將請求交給註冊的請求***執行if(
(processedrequest, response)
) mv = ha.
handle
gethandler()
);if(asyncmanager.
isconcurrenthandlingstarted()
)(processedrequest, mv)
;// 責任鏈執行後處理方法,實則是將請求交給註冊的請求***執行
(processedrequest, response, mv);}
catch
(exception ex)
catch
(throwable err)
// 處理返回的結果,觸發責任鏈上註冊的***的aftercompletion方法,其中也用到了handlerexecutionchain註冊的handler來處理錯誤結果
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...
設計模式 責任鏈模式
責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...