C 設計模式 職責鏈模式

2022-09-22 05:33:07 字數 1358 閱讀 5912

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

優點是當客戶提交乙個請求時,請求會沿著鏈傳遞知道乙個concretehandler對物件進行處理。換句話說,就是不管處理請求的物件在那裡,只要你把請求給職責鏈,它都會被處理,是的接收者和傳送都沒又物件的沒有對方的明確資訊,且鏈中物件都不知道這個鏈的結構。結果是職責鏈可以簡化物件的相關連線。他們僅僅保持乙個指向後繼者的引用,而不用指向它所有接收者的引用。

缺點暴露在當乙個請求可能走到鏈的末端都得不到處理的情況,或者因為沒有正確的配置而得不到處理,所以在使用職責鏈模式時,需要考慮到各種情況需要處理它的物件類。

#include using

namespace

std;

//請求類

struct

request;//

抽象經理類

class

manager

void setsuperior(std::shared_ptrsmartsuperior) //

設定管理者的上級

std::shared_ptr

getsuperior() const

const std::string& getname() const

virtual;};

//經理 經理所能有的許可權就是可批准下屬兩天內的假期

class commonmanager : public

manager

virtual

else}}

};//

總監類 總監所能有的許可權就是可批准下屬一周內的假期

class majordomo : public

manager

virtual

else}}

};//

總經理類

class generalmanager : public

manager

virtual

else

if (request.requesttype == "

加薪" && request.number > 500

參考——大話設計模式

參考——

設計模式 職責鏈模式 C

職責鏈模式 解耦請求的傳送者和請求的接受者,使多個物件都由機會接收到這個請求。所有的物件形成一條鏈,在這條鏈中總有乙個物件可以出來這個請求。場景 有多個物件可以處理乙個請求,那個物件處理這個請求則執行時確定 在不明確接受者的情況下,向多個物件中傳送乙個請求 include 任務型別 enum typ...

C 設計模式 職責鏈模式

目錄 基本概念 與例項 在哪種地方使用 職責鏈模式 chain of responsibility 時多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連線成一條鏈,並沿著這條鏈條傳遞該請求,直到有乙個物件處理它為止。這裡發出這個請求的客戶端並不知道這當中的哪個物件最終...

C 設計模式 職責鏈模式

什麼是職責鏈模式?在gof的 設計模式 可復用物件導向軟體的基礎 一書中對職責鏈模式是這樣說的 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,直到有乙個物件處理它為止 如下圖 對於每個角色,他們都有他們的職責 當我提交了休假申請時,專案經理需要判斷,看...