責任鏈模式

2021-09-29 01:41:27 字數 1648 閱讀 3217

很多框架如mybatis的外掛程式,servlet的filter,dubbo,安全框架諸如spring security、apache shiro都會用到設計模式中的責任鏈模式,所以學習責任鏈模式成為幫助你學習以上這些框架的乙個好的手段之一。今天我們就來了解一下責任鏈模式。

如果有多個物件(handler)都有機會處理資料來源(requestsource,這裡不是單純的資料庫資料來源,可以是乙個請求,總之是**),責任鏈可以使資料的傳送者和接收者解耦,資料沿著責任鏈傳遞,直到有乙個物件處理了它為止。

上去形成了一條流水線的鏈條,所以稱之為責任鏈,但是不僅僅侷限於鏈條,還可以成樹形或者環形,這取決於你的業務設計。

外掛程式設計、***、過濾器等一些針對切入點的特定鏈式處理。都可以使用責任鏈模式。

兩種方式的不同主要是定義處理鏈的順序和結構的不同,接下來我們來看看這三種方式。

通過處理器集合來定義處理順序

好處在於可以集中管理處理器,指責單一。非常容易理解,容易實現。缺點是如果新增處理器(handler)勢必影響已有的處理器,只能順序執行。處理流程是這樣的:

handlerchain 負責維護呼叫鏈條的順序,這裡預設實現用list來管理handler

public

inte***ce

handlerchain

// 實現

public

class

defaulthandlerchain

implements

handlerchain

@override

public

void

dochain

(requestsource requestsource)

}}

handler是處理鏈的節點抽象,是資料來源(requestsource)的具體處理者,它負責對資料的處理以及決定是否進入下乙個handler。

public

inte***ce

handler

// 其中乙個實現

public

class

headerhandler

implements

handler

}

利用鍊錶的指標特性

這裡利用了鍊錶的一部分特點,通過在當前的handler指定下乙個handler來作為指標,相比較上面而言,handler更自治,在節點的處理上更加靈活。

handler負責指標以及邏輯處理:

public

inte***ce

handler

/ 實現

public

class

headerhandler

implements

handler

@override

public handler getnext()

@override

public

void

dohandler

(requestsource requestsource)

}}

總結

責任鏈模式在各種常見框架中非常常見。所以建議各位在對此設計模式進行認真學習。

責任鏈模式

責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...

責任鏈模式

有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...

責任鏈模式

了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...