職責鏈模式:
使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。
handler:定義乙個處理請示的介面。
concretehandler:具體處理者類,處理它所負責的請求,可訪問它的後繼者,如果可處理該請求,就處理之,否則就將該請求者**給它的後繼者。
優點:當客戶提交乙個請求時,請求是沿鏈傳遞直至有乙個concretehandler物件負責處理它。
接收者和傳送者都沒有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構,結果是職責鏈可簡化物件的互相連線,它們僅需保持乙個指向其後繼者的引用,而不需要保持它所有的候選接受者的引用。
隨時增加或修改處理乙個請求的結構/增強了給物件指派職責的靈活性。
注意:請求可能到了鏈的末尾都得不到處理,或者因為沒有正確配置而得不到處理。
main.cpp
#include #include #include #include "manager.h"
using namespace std;
void process()
int main(int argc,char* argv)
manager.h
#ifndef manager_h
#define manager_h
#include #include typedef struct request
std::string _srequesttype;//請求型別
int _inumber;//請求數量
std::string _srequestcontent;//請求內容
}request;
//管理者
class manager
;//經理
class commonmanager : public manager
;//總經理
class generalmanager : public manager
;#endif
manager.cpp
#include "manager.h"
#include using namespace std;
manager::manager(const std::string& sname):_sname(sname)
manager::~manager(void)
void manager::setsuperior(std::shared_ptrptrsuperior)
//經理
commonmanager::commonmanager(const std::string& sname):manager(sname)
else }
}//總經理
generalmanager::generalmanager(const std::string& sname):manager(sname)
else if(request._srequesttype == "加薪" && request._inumber <= 500)
else if(request._srequesttype == "加薪" && request._inumber > 500)
}
設計模式 加薪非要老總批 職責鏈模式
一,概述 定義 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為之。優點 客戶提出請求時,請求時沿鏈傳遞直至有乙個concretehandler物件負責處理它 二,職責鏈基本 include using na...
大話設計模式二十四 職責鏈模式(加薪非要老總批 )
職責連模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係,將多個物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。管理者 public abstract class manager public void setsuperior manager superio...
大話設計模式二十四 職責鏈模式(加薪非要老總批 )
職責連模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係,將多個物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。管理者 public abstract class manager public void setsuperior manager superio...