責任鏈設計模式

2021-10-05 05:38:19 字數 2327 閱讀 1264

責任鏈模式(responsibility pattern), 是行為型設計模式之一。這種模型結構有點類似現實生活中鐵鍊,由乙個個鐵環首尾相接構成一條鏈,如果這種結構用在程式設計領域,則每個節點可以看做乙個物件,每個物件有不同的處理邏輯,將乙個請求從鏈的首端發出,沿著鏈的路徑依次傳遞每個節點物件,直到有物件處理這個請求為止,我們將這樣一種模式稱為責任鏈模式。

1.多個物件可以處理同乙個請求,但具體由哪個物件處理則在執行時動態決定

2. 在請求處理者不明確的情況下,向多個物件中的乙個提交乙個請求

3. 需要動態處理一組物件處理請求

需求說明:

採購審批需求說明,要求如下:

1、如果金額小於等於5000元,由教學主任審批

2、如果金額小於等於10000元,由院長審批

3、如果金額小於等於30000元,由副校長審批

4、如果金額大於30000元,由校長審批

purchaserequest類

/**

* 請求類

*/public

class

purchaserequest

public integer gettype()

public integer getprice()

public

intgetid()

}

/**

* 審批人 -- 抽象類

*/public

abstract

class

// 下乙個處理者

public

void

// 處理審批請求的方法,得到乙個請求,處理是子類完成的,因此該方法做成抽象的

public

abstract

void

processrequest

(purchaserequest purchaserequest)

;}

/**

* 系主任

*/public

class

extends

@override

public

void

processrequest

(purchaserequest purchaserequest)

else

}}

public

class

extends

@override

public

void

processrequest

(purchaserequest purchaserequest)

else

}}

public

class

extends

@override

public

void

processrequest

(purchaserequest purchaserequest)

else

}}

public

class

extends

@override

public

void

processrequest

(purchaserequest purchaserequest)

else

}}

clinet類

public

class

clinet

}

輸出結果:

1、將請求和處理分開,實現解耦,提高系統的靈活性

2、簡化了物件,使物件不需要知道鏈的結構

3、效能會受到影響,特別是鏈比較長的時候,因此需要控制鏈的最大節點數量,一般通過在handler中設定乙個最大的節點數量,在setnext()方法中判斷是否已經超過了閥值,超過則不允許該鏈建立,避免超過超長鏈無意識破壞系統效能

4、除錯不方便,採用了類似遞迴的方式,除錯時邏輯可能比較複雜

5、最佳應用場景:有多個物件可以處理同乙個請求時,比如:多級請求,請假/加薪等審批流程

設計模式 責任鏈

使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...

責任鏈設計模式

責任鏈的應用場景 簡單使用責任鏈模式拆分 servlet api 中的過濾器 模擬servlet中的request物件 desc模擬 servlet 中的 request 物件 模擬servlet中的response物件 desc模擬 servlet 中的 response 物件 過濾器抽象層 de...

設計模式 責任鏈

引用 objective c程式設計之道 ios設計模式解析 責任鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間發生耦合。此模式將這些物件連成一條鏈,從而沿著這條鏈傳遞請求,直到有乙個物件處理它為止。責任鏈主要思想 很多物件引用了同一型別的另乙個物件,形成了一條鏈。鏈中每個物件...