一,概述
定義:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為之。
優點:客戶提出請求時,請求時沿鏈傳遞直至有乙個concretehandler物件負責處理它
二,職責鏈基本**
#include using namespace std;
class handler
virtual void handlerequest(int request)
}; handler* handler::successor=null; //必須是static 變數才能在全域性初始化
class concretehandler1 :public handler
}};
class concretehandler2 :public handler
}};
class concretehandler3 :public handler
}};
int main()
; for(int i=0;i<8;++i)
return 0;
}
三,示例
小菜要求加薪,而加薪的批准需要總經理來批准。經理交給總監,總監交給總經理。
缺點:manager 類 太長,分支太多。如果要增加專案經理、部門經理等職位的話,需要更改原類,比較麻煩。
#include using namespace std;
//enum managerlevel managerlevel;
enum managerlevel ;
//申請
class request
void setrequesttype(string value)
//申請內容
private:
string requestcontent;
public:
string getrequestcontent()
void setrequestcontent(string value)
//數量
private:
int number;
public:
int getnumber()
void setnumber(int value)
}; //管理者
class manager
//得到結果
void getresult(managerlevel managerlevel, request request)
: 數量 被批准", name, request.requestcontent, request.number);
cout<500)
2)改進後的**
說明:c++中不可以直接宣告類的物件,但是可以直接宣告類的指標。
#include using namespace std;
//enum managerlevel managerlevel;
enum managerlevel ;
//申請
class request
void setrequesttype(string value)
//申請內容
private:
string requestcontent;
public:
string getrequestcontent()
void setrequestcontent(string value)
//數量
private:
int number;
public:
int getnumber()
void setnumber(int value)
}; //管理者
class manager
//設定管理者的上級
void setsuperior(manager *superior)
//申請請求
}; //經理
class commonmanager :public manager
設計模式 24 加薪非要老總批? 職責鏈模式
職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。handler 定義乙個處理請示的介面。concretehandler 具體處理者類,處理它所負責的請求,可訪問它的後繼者,如果可處理該請求,就...
大話設計模式二十四 職責鏈模式(加薪非要老總批 )
職責連模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係,將多個物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。管理者 public abstract class manager public void setsuperior manager superio...
大話設計模式二十四 職責鏈模式(加薪非要老總批 )
職責連模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係,將多個物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。管理者 public abstract class manager public void setsuperior manager superio...