設計模式(八) 責任鏈模式

2021-08-28 15:07:00 字數 1956 閱讀 2025

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

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

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

需要動態指定一組物件處理請求。

我們假設乙個場景,在外出差需要報銷費用。例如用了5w塊,然後報銷,組長只能報銷1000以下的,主管只能報銷5000以下的,經理只能報銷10000以下的,老闆則有許可權報銷任何數字,當然也要老闆真能給。這樣我們的請求報銷就是乙個請求,組長、主管、經理、老闆則是處理者。

抽象領導者

leader.class

public

abstract

class

leader

else

}/**

* description: 能批覆的額度

*/public

abstract

intlimit()

;/**

* description: 處理報銷

*/public

abstract

void

handle

(int money)

;}

各個具體的領導者

groupleader.class

/**

* description: 組長處理者

*/public

class

groupleader

extends

leader

@override

public

void

handle

(int money)

}

directorleader.class

/**

* description: 主管處理者

*/public

class

directorleader

extends

leader

@override

public

void

handle

(int money)

}

managerleader.calss

/**

* description: 經理處理者

*/public

class

managerleader

extends

leader

@override

public

void

handle

(int money)

}

boss.class

/**

* description: 老闆處理者

*/public

class

boss

extends

leader

@override

public

void

handle

(int money)

}

請求發起

requester.calss

public

class

requester

}

可以對請求者和處理者關係解耦,提高**的靈活性。

對鏈中請求處理者的遍歷,如果處理者太多,那麼遍歷必定會影響效能,特別是在一些遞迴呼叫中,要慎用。

設計模式 責任鏈模式

定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...

設計模式 責任鏈模式

責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...

設計模式 責任鏈模式

責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...