設計模式之責任鏈模式講解

2021-09-27 09:41:10 字數 1437 閱讀 5067

很多框架如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 responsibleity 責任鏈模式 在責任鏈模式 中,很多物件由每乙個物件對其下家的引用而接。起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。客戶並不知道鏈上的哪乙個物件最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者...

設計模式之責任鏈模式

假設現在乙個公司的請假流程如下 一天及以下由小組組長審批,一天以上三天以下由經理審批,三天以上七天以下由老闆審批,七天以上直接勸退。如果每次請假時都很長的if else 來判斷該去找誰請假,很不容易擴充套件,我們使用責任鏈模式來實現。首先,是乙個抽象的父類 public abstract class...