行為型設計模式之責任鏈模式

2021-08-28 19:14:01 字數 2151 閱讀 9143

責任鏈模式是一種鏈式結構,就是由乙個個節點首尾相接串起來的結構,具有很好的靈活性,將每乙個節點看作是乙個物件,每乙個物件擁有不同的處理邏輯,將乙個請求從鏈式的首端發出,沿著鏈的路徑依此傳遞每乙個節點物件,直到有物件處理這個請求為止,我們將這樣一種模式稱為責任鏈模式。

使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。

(1)多個物件可以處理同一請求,但具體哪個物件處理則是在執行時動態決定

(2)在請求者不明確的情況下向多個物件中的乙個提交乙個請求

(3)需要動態指定一組物件的處理請求

角色介紹:

在乙個公司中,員工拿到了乙份合同,需要上級的簽名,於是員工就把合同給組長,但是組長沒有許可權簽名,於是組長就把合同給經理,但是經理也沒有足夠的許可權簽名,於是經理就把合同給老闆,老闆二話不說就把合同給籤了。上面的例子就是責任鏈模式,員工是請求的發起者,處於鏈的底端,而老闆是處於鏈條頂端的類,員工發起請求後,請求經過層層**,直至請求被處理,員工只是和組長發生了關聯,後面合同被誰處理,員工並不知道,也並不關心,他在乎的是合同簽名的結果,責任鏈模式很好的將請求的發起者與處理者解耦,下面用**來模擬。

抽象的員工,即abstracthandler角色

public abstract class staff else }}

public abstract int gethandlerlever();//自身能處理請求的級別

public abstract void handle(contract contract);//具體的處理過程

}

在這個抽象的處理者中,一是定義了兩個介面來確定乙個staff應有的行為和屬性,二是封裝了乙個處理請求的邏輯**方法,確定當前staff是否有足夠的級別來處理當前合同,如果沒有,就把合同**給上一級staff,接下來是各個實現類。

組長,即concretehandler角色

public class croupstaff extends staff 

@override

public void handle(contract contract)

}

經理,即concretehandler角色

public class managerstaff extends staff 

@override

public void handle(contract contract)

}

老闆,即concretehandler角色

public class bossstaff extends staff 

@override

public void handle(contract contract)

}

接下來看一看請求,就是合同

抽象的合同類,即abstractrequest角色

public abstract class contract
具體的合同類,即concreterequest角色

public class concretecontract extends contract 

@override

public int getcontractlever()

}

最後員工從組長發起請求

請求發起者,員工

public class employee 

}

輸出結果
老闆簽名了合同!
其實這裡也可以直接繞過組長和經理,直接找老闆簽名,這也是責任鏈模式的靈活性,請求的發起可以從任意節點發起,同時也可以改變責任鏈模式內部的傳遞規則,如直接找老闆簽名。

對於責任鏈模式中的節點,有兩個行為,一是處理請求,二是將請求**給下乙個節點,不允許某個節點處理者處理了請求後又把節點**給下乙個節點。對於責任鏈中的請求,只有倆個結果,乙個是被某個節點處理,乙個是所有物件均沒有處理。

本文相關原始碼位置

設計模式 行為型之責任鏈模式

責任鏈 chain of responsibility 模式的定義 為了避免請求傳送者與多個請求處理者耦合在一起,於是將所有請求的處理者通過前一物件記住其下乙個物件的引用而連成一條鏈 當有請求發生時,可將請求沿著這條鏈傳遞,直到有物件處理它為止。責任鏈模式也叫職責鏈模式。優點 降低了物件間的耦合。乙...

設計模式 行為型 責任鏈模式

從擊鼓傳花談起 擊鼓傳花是一種熱鬧而又緊張的飲酒遊戲。在酒宴上賓客依次坐定位置,由一人擊鼓,擊鼓的地方與傳花的地方是分開的,以示公正。開始擊鼓時,花束就開始依次傳遞,鼓聲一落,假如花束在某人手中,則該人就得飲酒。擊鼓傳花的類圖結構如下 如果用乙個物件系統描述賈府,那麼賈母 賈赦 賈政 賈寶玉和賈環等...

設計模式 行為型 責任鏈模式

責任鏈 chain of responsibility 模式為請求建立了乙個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。使用場景 乙個請求物件需要多種任務的處理,通過鏈式傳播物件的場景。優點1.職責鏈對於客戶請求是透明的 2.鏈 將請求的...