責任鏈模式是很實用的一種實際方法。舉個例子來說,我們平常在公司裡面難免不了報銷流程。但是,我們知道公司裡面每一級的領導的報批額度是不一樣的。比如說,科長的額度是1000元,部長是10000元,總經理是10萬元。
那麼這個時候,我們應該怎麼設計呢?其實可以這麼理解。比如說,有人來找領導報銷費用了,那麼領導可以自己先看看自己能不能報。如果費用可以順利報下來當然最好,可是萬一報不下來呢?那就只能請示領導的領導了。
[cpp]view plain
copy
typedef
struct
_leader
leader;
所以這個時候,我們首先需要設定額度和領導。
[cpp]view plain
copy
void
set_account(
struct
_leader* pleader,
intaccount)
void
set_next_leader(
const
struct
_leader* pleader,
struct
_leader* next)
此時,如果有乙個員工過來報銷費用,那麼應該怎麼做呢?假設此時的leader是經理,報銷額度是10萬元。所以此時,我們可以看看報銷的費用是不是小於10萬元?少於這個數就ok,反之就得上報自己的領導了。
[cpp]view plain
copy
intrequest_for_manager(
struct
_leader* pleader,
intnum)
C 設計模式 責任鏈模式
優點 請求和處理分開 缺點 避免出現超長鏈的情況,一般的做法是在handler中設定乙個最大節點數量,在setnext方法中判斷是否已經是超過其閾值,超過則不允許該鏈建立,避免無意識地破壞系統效能 抽象處理者 ifndef handler h define handler h include req...
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...