責任鏈模式是一種物件的行為模式。
責任鏈模式:避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。
在責任鏈模式裡,很多的物件由每乙個物件對其下家的引用而聯接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織鏈和分配責任。比如servlet中的filter,有多層,當然,這個在spring security使用的更加淋漓盡致。
在責任鏈模式中發出請求的客戶端並不知道這當中的哪個物件最終處理這個請求,這樣系統的更改可以在不影響客戶端的情況下動態的重新組織和分配責任。
責任鏈模式
責任鏈模式中,主要的角色有handler和concretehandler:
抽象類handler,具體的實現都要繼承該抽象類。定義了繼任者,以及處理請求的方法。
@data
public
abstract
class
handler
}複製**
第乙個繼任者,num小於10則處理,否則繼續傳遞。
public
class
concretehandler1
extends
handler
else
if (successor != null)
}}複製**
第二個繼任者,處理10到20的num。
public
class
concretehandler2
extends
handler
else
if (successor != null)
}}複製**
第三個繼任者,處理20到30的num。
public
class
concretehandler3
extends
handler
else
if (successor != null)
}}複製**
客戶端示例**。呼叫鏈為:1->2->3。
public
class
testdemo
}複製**
本文主要介紹了行為模式的責任鏈模式。在看到一些文章處理很多if...else...
語句時,也會用責任鏈模式處理,將條件判斷分散到各個實現類中,並且這些處理類的優先處理順序可以隨意的設定,並且如果想要新增新的 handler 類也是十分簡單的,這符合開放閉合原則。不過需要注意避免責任鏈**現迴圈引用。優缺點總結如下:
優點: 不足之處:
話設計模式—責任鏈模式
設計模式之責任鏈模式
設計模式之 責任鏈模式
在一些情況下,對乙個訊息 含事件 的響應和處理需要很多物件來參與,這些物件對訊息的處理有前後順序,形成乙個處理鏈條,但物件是否真正處理訊息有賴於在它之前的物件的處理策略,前乙個物件處理後,後乙個物件則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信...
設計模式之(責任鏈模式)
chain of responsibleity 責任鏈模式 在責任鏈模式 中,很多物件由每乙個物件對其下家的引用而接。起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。客戶並不知道鏈上的哪乙個物件最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者...
設計模式之責任鏈模式
假設現在乙個公司的請假流程如下 一天及以下由小組組長審批,一天以上三天以下由經理審批,三天以上七天以下由老闆審批,七天以上直接勸退。如果每次請假時都很長的if else 來判斷該去找誰請假,很不容易擴充套件,我們使用責任鏈模式來實現。首先,是乙個抽象的父類 public abstract class...