在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。
需要動態處理一組物件處理請求
優點:1.我們可以把請求和大部分的處理者分離,換句話說我們不需要知道最終處理我們請求的人是誰,只需要知道第乙個處理我們請求的人即可。這樣大大降低了系統的耦合度。
2.由於職責鏈模式的靈活性,我們可以很容易的在客戶端增加或者刪除職責鏈上的內容,而系統不需要進行修改,符合開放封閉原則。
3.職責鏈模式很靈活,我們可以衍生出一些變體。而且我們的處理流程也可以不僅僅是鏈,可以是樹,或者環等等。
例項:申請請假的流程。
在職責鏈中,先是由manager來批假。若他不能批假,則自動傳遞到他的上級批假,若還是職權不夠,則ceo進行操作。相比於傳統模式下寫批假流程,是需要在main()中進行判斷當前領導是否有職權,並根據if條件選擇其它領導的,而職責鏈不需要,它把基類指標指向當前領導的上級,若當前領導搞不定,則會自動呼叫上級處理。
#include using namespace std;
class ihandler
virtual ~ihandler() {}
void setsuccessor(ihandler* successor)
virtual void handlerequest(float days) = 0;
};class manager : public ihandler
~manager() {}
virtual void handlerequest(float days) override
else
}};class director : public ihandler
~director() {}
virtual void handlerequest(float days) override
else
}};class ceo : public ihandler
~ceo() {}
virtual void handlerequest(float days) override
else
}};int main()
職責鏈模式
1.職責鏈 namespace dutychainpattern 用來處理請求 public abstract void transmitrequest int request 班主任 職責鏈上的乙個節點,在裡面進行判斷,看能否處理請求,不能則將請求轉移 public class classadvi...
職責鏈模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
職責鏈模式
劇情簡要 學習此模式,讓筆者聯想到自然界的生物鏈。打個比方 大魚吃小魚,小魚吃蝦公尺。河裡的小蝦公尺問大魚,你要不要吃我啊?大魚說 你太小了,吃了 沒吃,return 懶得吃!然後蝦公尺又問小魚 小螃蟹 小河馬同樣的問題。其實如果小蝦公尺這麼想自我了結的話,根本不用這麼費勁。這就開始了我們職責鏈模式...