天天看點

設計模式:責任鍊模式(Chain of Responsibility)

 使多個對象都有機會處理請求,進而避免請求的發送者和接受者之間的耦合關系。将這些對象連成一條鍊,并沿着這條鍊傳遞該請求,知道有一個對象處理它為止。

設計模式:責任鍊模式(Chain of Responsibility)

責任鍊模式的角色:

1. 抽象處理者角色(Handler):定義出一個處理請求的接口。如果需要,接口可以定義出一個方法以設定和傳回對下家的引用。這個角色通常由一個Java抽象類或者Java接口實作。上圖中Handler類的聚合關系給出了具體子類對下家的引用,抽象方法handlerRequest()規範了子類處理請求的操作。

2. 具體處理者角色(ConcreteHandler):具體處理者接到請求後,可以選擇将請求處理掉,或者将請求傳給下家。

 舉個簡單例子:報帳流程,項目經理<部門經理<總經理

 其中項目經理報帳額度不能超過1000,部門經理報帳額度不能超過5000,超過5000的則需要總經理稽核。

1 抽象處理角色ConsumeHandler

2 具體處理角色

3 測試代碼

測試結果:

 和這個例子相同的還有請假管理,比如請假2天内的部門經理可以處理,超過2天不超過5天的可以研發總監處理,超過5天的需要總經理處理。

 責任鍊模式可能是一條直線,一個環鍊甚至一個樹結構的一部分。

 責任鍊模式的缺點:當責任鍊的鍊結構比較長比較複雜的話,會産生很多記憶體垃圾對象,他們在實際進行中,并沒有發揮任何的作用。

JDK中的責任鍊模式 java.util.logging.Logger#log() javax.servlet.Filter#doFilter()

參考資料