大話設計模式(13)職責鏈模式

2021-09-26 22:17:47 字數 1357 閱讀 8775

一、場景描述及uml圖

簡單概括:適用於串序指向的策略,如演算法流:a-b-c-d-e-f,各個演算法依次指向,特定條件下某些演算法可能會跳過。

二、概念

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

三、說明 

角色:(1)handler類:定義乙個處理請求的介面。

(2)concretehandler類:具體的處理請求的介面。

職責鏈模式的好處:

(1)最關鍵的是,當客戶提交乙個請求時,請求時沿鏈傳遞直至有乙個concretehandler物件負責處理它。

(2)接收者和傳送者都沒有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構。結果是職責鏈可簡化物件的相互連線,他們僅需要保持乙個指向其後繼者的引用,而不需要保持它所有的候選接收者的引用。

(3)由於是在客戶端來定義鏈的結構,所以使用者可以隨時地增加或者修改處理乙個請求的結構。增強了給物件指派職責的靈活性。

注意:乙個請求極有可能到了鏈的末端都得不到處理,或者因為沒有正確配置而得不到處理。

四、c++實現

(1)

#ifndef chainofresponsibility_h

#define chainofresponsibility_h

#include #include //請求類

class request

std::string gettype()

void setcontent(std::string content)

std::string getcontent()

void setnumber(int number)

int getnumber() };

//handler類,此處為manager類

class manager

manager(std::string name)

~manager()

//設定繼任者

void setsuperior(manager* superior)

//處理請求的抽象方法};

//concretehandler1:此處為經理,commonmanager

class commonmanager:public manager

(3) 執行效果

大話設計模式 職責鏈模式

1.當客戶提交乙個請求時,請求是沿鏈傳遞直至有乙個concretehandler物件負責處理它 dp 2.接收者和傳送者都沒有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構。結果是職責鏈可簡化物件的相互連線,它們僅需保持乙個指向其後繼者的引用,而不需保持它所有的候選接受者的引用 dp 3.隨時隨...

設計模式(13) 職責鏈模式

行為型模式關注物件之間互動,物件之間的通訊與協作。共十乙個,職責鏈模式是其中之一。為什麼職責鏈模式屬於行為型模式,因為他很好的體現了物件之間的通訊與協作,職責鏈,就是說在這條鏈上的物件都有這個職責,有職責來做什麼呢?處理請求。舉個例子,公司審批活動經費,小於5000,副經理就有許可權審批,5000 ...

《大話設計模式 職責鏈模式》筆記

1 職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。2 責任鏈模式結構圖 3 簡單 實現 handler類,定義乙個處理請示的介面。public a...