設計模式 職責鏈模式

2021-06-17 16:22:50 字數 2641 閱讀 4026

1、request.h

#ifndef request_h

#define request_h

#include #include using namespace std;

class request //請求類定義

;#endif // request_h

2、manager.h

#ifndef manager_h

#define manager_h

#include "request.h"

#include #include using namespace std;

class manager //處理請求的基類,由具體的處理類加以實現

void setsuperior(manager* m)

};#endif // manager_h

3、commonmanager.h

#ifndef commonmanager_h

#define commonmanager_h

#include "manager.h"

#include #include using namespace std;

class commonmanager : public manager //一般經理類

else if (superior != 0)

else

}};#endif // commonmanager_h

4、majormanager.h

#ifndef majormanager_h

#define majormanager_h

#include "manager.h"

#include #include using namespace std;

class majormanager : public manager //小組經理類

else if (superior != 0)

else

}};#endif // majormanager_h

5、generalmanager.h

#ifndef generalmanager_h

#define generalmanager_h

#include "manager.h"

#include #include using namespace std;

class generalmanager : public manager //總經理類

else if (request->requesttype == 1 && request->number <= 1000)

else if (superior != 0)

else

}};#endif // generalmanager_h

6、main.cpp

/*

開發ide:qt creater

開發環境:qt c++

參考**:神秘果:

定義:使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。

將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。

理解:1.職責鏈(chain of responsibility)模式也許被看做乙個使用策略物件的「遞迴的動態一般化".此時提出乙個呼叫,

在乙個鏈序列中的每個策略都試圖滿足這個呼叫。這個過程直到有乙個策略成功滿足該呼叫或者到達序列的末尾才結束。

在遞迴方法中,有個函式反覆呼叫其自身至達到某個終止條件。在職責鏈中,乙個函式呼叫自身,(通過遍歷策略鏈)呼叫函式的乙個

不同實現,如此反覆直至達到某個終止條件。這個終止條件或者是已達到策略鏈的底部(這樣就會返回乙個預設物件;

不管能否提供這個預設結果,必須有個方法能夠決定該職責鏈搜尋是成功還是失敗)或者是成功找到乙個策略。

2.除了呼叫乙個函式來滿足某個請求以外,鏈中的多個函式都有此機會滿足某個請求,因此它有點專家系統的意味。

要點:1.職責鏈模式-嘗試採用一系列策略模式:

2.在職責鏈中,乙個函式呼叫自身,呼叫函式的乙個不同實現,如此反覆直至達到某個終止條件。

3.這個終止條件或者是已到達策略鏈的底部或者是成功找到乙個策略。

4.本質是嘗試多個解決方法直到找到乙個起作用的方法。

應用:如:員工請假和加薪請求,經理按職位組成一條鏈,從底到高依次為:一般經理,小組經理,總經理

當有請求時,依次經過一般經理->小組經理->總經理,在這個過種中,只要有乙個經理有權處理這個請求後,這個請求即將結束。

以上文字說明,從網上整理而來,有可能部分與其他同仁相同,請諒解,希望我們能夠共同交流,謝謝!

*/#include "commonmanager.h"

#include "majormanager.h"

#include "generalmanager.h"

int main(int argc, char *argv)

執行結果:

request5:can not be processed!

=== jhluroom finish _^_ ===

設計模式 職責鏈模式

2008年08月17日 星期日 下午 04 28 using system using system.collections.generic using system.text public officer officer o public abstract void deal action a c...

設計模式 職責鏈模式

今天跟大家分享下設計模式中的職責鏈模式。不知道大家在學習職責鏈模式的時候是否感覺困難。我剛開始學的時候就被整暈了。呵呵,進入正題。職責鏈模式是物件行為型模式中比較有特點的設計模式了,的確有意思,它可以像資料結構中煉表一樣傳遞。其實生活中好多的行為方式都體現了職責鏈模式,我們初期學習者可以把職責鏈模式...

設計模式 職責鏈模式

職責鏈模式,參考這篇文章寫的很好。外觀模式,參考這篇文章寫的也很好。職責鏈,chain of responsibility。1.意圖 使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。3.適用性 在以下條件...