設計模式 加薪非要老總批 職責鏈模式

2021-08-27 02:24:08 字數 2145 閱讀 1906

一,概述

定義:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為之。

優點:客戶提出請求時,請求時沿鏈傳遞直至有乙個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...