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

2021-07-04 13:26:40 字數 1748 閱讀 5087

職責鏈模式:

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

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...