一、場景描述及uml圖
簡單概括:適用於串序指向的策略,如演算法流:a-b-c-d-e-f,各個演算法依次指向,特定條件下某些演算法可能會跳過。
二、概念
職責鏈模式(chain of responsibility):使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,知道有乙個物件處理它為止。
三、說明
角色:(1)handler類:定義乙個處理請求的介面。
(2)concretehandler類:具體的處理請求的介面。
職責鏈模式的好處:
(1)最關鍵的是,當客戶提交乙個請求時,請求時沿鏈傳遞直至有乙個concretehandler物件負責處理它。
(2)接收者和傳送者都沒有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構。結果是職責鏈可簡化物件的相互連線,他們僅需要保持乙個指向其後繼者的引用,而不需要保持它所有的候選接收者的引用。
(3)由於是在客戶端來定義鏈的結構,所以使用者可以隨時地增加或者修改處理乙個請求的結構。增強了給物件指派職責的靈活性。
注意:乙個請求極有可能到了鏈的末端都得不到處理,或者因為沒有正確配置而得不到處理。
四、c++實現
(1)
#ifndef chainofresponsibility_h
#define chainofresponsibility_h
#include #include //請求類
class request
std::string gettype()
void setcontent(std::string content)
std::string getcontent()
void setnumber(int number)
int getnumber() };
//handler類,此處為manager類
class manager
manager(std::string name)
~manager()
//設定繼任者
void setsuperior(manager* superior)
//處理請求的抽象方法};
//concretehandler1:此處為經理,commonmanager
class commonmanager:public manager
(3) 執行效果
大話設計模式 職責鏈模式
1.當客戶提交乙個請求時,請求是沿鏈傳遞直至有乙個concretehandler物件負責處理它 dp 2.接收者和傳送者都沒有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構。結果是職責鏈可簡化物件的相互連線,它們僅需保持乙個指向其後繼者的引用,而不需保持它所有的候選接受者的引用 dp 3.隨時隨...
設計模式(13) 職責鏈模式
行為型模式關注物件之間互動,物件之間的通訊與協作。共十乙個,職責鏈模式是其中之一。為什麼職責鏈模式屬於行為型模式,因為他很好的體現了物件之間的通訊與協作,職責鏈,就是說在這條鏈上的物件都有這個職責,有職責來做什麼呢?處理請求。舉個例子,公司審批活動經費,小於5000,副經理就有許可權審批,5000 ...
《大話設計模式 職責鏈模式》筆記
1 職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。2 責任鏈模式結構圖 3 簡單 實現 handler類,定義乙個處理請示的介面。public a...