職責鏈模式(chain of responsibility pattern)使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。
uml 結構圖:
優點:缺點:
請假 - 流程處理混跡職場,從來都身不由己,誰不想在繁忙的工作裡偷得浮生半日閒。但請假從來都是一門技術活,拼技術,更拼情商!
無論如何,只要你願意,從感冒到被綁架,一定能找出一萬種理由:
彪悍的人生不需要解釋,如果沒有過這種請假經歷,就不是職場老司機。。。
當員工發出請假請求時,鏈中的處理者可以對請求作出響應或者將其傳遞給上級。每個處理者都有自己的一套規則,而這套規則是他們可以批准的。審批流程:經理(1 天及以下) -> 總監(3 天及以下) -> 總裁(7 天為界限)。
建立抽象處理者
抽象處理者除了提供乙個處理請假的介面之外,還有乙個很關鍵的地方就是定義後繼者,這樣便可以構建一條鏈:
建立具體處理者具體處理者包含 manager、director、ceo,它們的實現基本相同,只是批准的天數不一樣:// handler.h
#ifndef handler_h
#define handler_h
#include
// 抽象處理者
class ihandler
virtual ~ihandler() {}
void setsuccessor(ihandler *successor)
virtual
void handlerequest(float days) = 0;
protected:
ihandler *m_psuccessor; // 後繼者
};#endif // handler_h
注意:由於 ceo 位於最高層(處於鏈的末尾),所以請求到此結束,不會繼續向下傳遞。// concrete_handler.h
#ifndef concrete_handler_h
#define concrete_handler_h
#include "handler.h"
// 經理
class manager : public ihandler
~manager() {}
virtual
void handlerequest(float days) override else
}};// 總監
class director : public ihandler
~director() {}
virtual
void handlerequest(float days) override else
}};// 總裁
class ceo : public ihandler
~ceo() {}
virtual
void handlerequest(float days) override else
}};#endif // concrete_handler_h
建立客戶端
開始請假,說出你的理由:
輸出如下:// main.cpp
#include
"concrete_handler.h"
#ifndef safe_delete
#define safe_delete(p) }
#endif
int main()
manager 批准了 1 天假director 批准了 2 天假
ceo 批准了 5 天假
給你放長假,以後不用來上班啦!
c 職責鏈模式
職 責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處 理它為止。其思想很簡單,考慮員工要求加薪。公司的管理者一共有 總經理 總監 經理,如果乙個員工要求加薪,應該向主管的經理申請,如果加薪的數量 在經理的...
設計模式 職責鏈模式 C
職責鏈模式 解耦請求的傳送者和請求的接受者,使多個物件都由機會接收到這個請求。所有的物件形成一條鏈,在這條鏈中總有乙個物件可以出來這個請求。場景 有多個物件可以處理乙個請求,那個物件處理這個請求則執行時確定 在不明確接受者的情況下,向多個物件中傳送乙個請求 include 任務型別 enum typ...
C 設計模式 職責鏈模式
目錄 基本概念 與例項 在哪種地方使用 職責鏈模式 chain of responsibility 時多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連線成一條鏈,並沿著這條鏈條傳遞該請求,直到有乙個物件處理它為止。這裡發出這個請求的客戶端並不知道這當中的哪個物件最終...