大家都在學校裡呆了很多年,必然非常熟悉這樣的情形,我們上課的時候想上廁所,直接向代課老師打報告,代課老師會直接同意,但是我們身體不適需要請假一兩天的時候代課老師就沒有這個權利,代課老師需要將我們的請求提交給班主任處理,這種事情班主任有權利直接批准,更甚至,如果我們中有像韓寒這樣少年時就顯露才華的人,想提出退學申請走文學道路的時候,班主任就會把申請提交給校長來權奪。
這就是責任鏈模式的典型應用場景,它包含了一些命令物件和一系列的處理物件,每個處理物件決定它能處理哪些命令物件,它也知道如何將它不能處理的命令物件傳遞給鏈中的下乙個處理物件。在責任鏈模式中,發出請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這樣系統就可以在不影響客戶端程式的前提下重新分配鏈上的責任。
責任鏈模式的類圖如下:
責任鏈模式中包含的角色有:
抽象處理者handler:是乙個抽象類,定義出乙個處理請求的介面
#include "stdafx.h"
#include#includeusing namespace std;
class studentrequest //學生請求類
studentrequest(string req) :request(req){}
~studentrequest(){}
void setrequest(string req)
string getrequest()
private:
string request;
};class schoolworker //抽象處理者,學校工作人員
virtual void processrequest(studentrequest *sreq) = 0; //請求處理抽象介面
void setnextprocessor(schoolworker *nextprocessor) //設定下一級處理物件
protected:
schoolworker *mnextprocessor;
};class classteacher :public schoolworker //代課老師
void processrequest(studentrequest *sreq) };
class classmanager :public schoolworker //班主任
void processrequest(studentrequest *sreq) };
class principal :public schoolworker //班主任
void processrequest(studentrequest *sreq) };
int _tmain(int argc, _tchar* argv)
執行結果:
責任鏈模式
責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...
責任鏈模式
有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...
責任鏈模式
了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...