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