設計模式之職責鏈模式

2021-08-05 19:28:08 字數 1133 閱讀 3242

職責鏈模式(chain of responsibility):使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。

可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者。每個處理者只要知道下乙個處理者是誰就可以了,耦合度很低,類似鍊錶結構。

處理者類,處理方法的引數可以根據實際需要設定型別:

public

abstract

class handler

public

abstract

void

handle(int request);

}

具體處理類:

class

manager

extends

handler else

if (successor != null)

}}class

director

extends

handler else

if (successor != null)

}}class

generalmanager

extends

handler else

}}

測試類:

public

class main

}

輸出:

經理同意了2天的請假

請假天數超過經理許可權

總監同意了7天的請假

請假天數超過經理許可權

請假天數超過總監許可權

總經理同意了21天的請假

請假天數超過經理許可權

請假天數超過總監許可權

總經理拒絕了40天的請假

兩個模式的表現十分類似,都是通過定義乙個基類實現各種判斷的解耦。

不過職責鏈模式把各種分支的關係交給呼叫方處理,分支間的關係可以比較靈活處理,但是也可能因為呼叫方操作不當導致出錯的問題。

狀態模式則是把分支間的關係直接耦合在分支當中了,呼叫方無法去修改分支間的關係,不過呼叫方也節省了設定分支關係的步驟,直接呼叫即可。

設計模式之職責鏈模式

如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...

設計模式之職責鏈模式

職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...

設計模式之職責鏈模式

職責鏈模式 chain of responsibility pattern 使多個物件都有機會處理請求,從而避免請求傳送者和請求的接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞請求,知道有乙個物件處理它為止。職責鏈模式的核心思路 客戶端只需要傳送請求,職責鏈上的處理者負責處理,客戶端不...