責任鏈模式(chain of responsibility)的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。結構圖為:
用乙個採購的例子來說明,採購人員在進行採購前需經過上級部門的批准,對於不同金額的採購分別要由不同級別的上級才能審批,假設1萬以內的採購需要主管批准,10萬以內的需要主管向總經理申請批准,超過10萬總經理向需董事長宴請批准,這時對於採購的審批過程就形成了一條責任鏈,對於不同的採購請求就需要一級一級的向上傳遞,並最終傳遞到最上級然後自行處理。
結構圖如下:
實現**: //
processor.h
class
processor;//
processor.cpp
#include
"stdafx.h
"#include
"processor.h
"processor::processor()
processor::
~processor()
}void
processor::setsuccessor(processor
*pprocessor)
#include
"processor.h
"class
director :
public
processor;//
director.cpp
#include
"stdafx.h
"#include
"director.h
"#include
<
iostream
>
using
namespace
std;
director::director()
director::
~director()
void
director::request(
double
damount)
else}}
#include
"processor.h
"class
manager :
public
processor;//
manager.cpp
#include
"stdafx.h
"#include
"manager.h
"#include
<
iostream
>
using
namespace
std;
manager::manager()
manager::
~manager()
void
manager::request(
double
damount)
else}}
#include
"processor.h
"class
chariman :
public
processor;//
chariman.cpp
#include
"stdafx.h
"#include
"chariman.h
"#include
<
iostream
>
using
namespace
std;
chariman::chariman()
chariman::
~chariman()
void
chariman::request(
double
damount)
#include
"stdafx.h
"#include
"processor.h
"#include
"director.h
"#include
"manager.h
"#include
"chariman.h
"int
main(
intargc,
char
*argv)
**中申請了超過10成的訂購請求,於是各級別負責人一步一步向上級提交申請,並最終由最上層決定審批結果。
執行結果如下:
申請金額超出主管許可權範圍,需向總經理申請審批
申請金額超出總經理許可權範圍,需向董事長申請審批
董事長審批了採購請求
C 設計模式 責任鏈模式
優點 請求和處理分開 缺點 避免出現超長鏈的情況,一般的做法是在handler中設定乙個最大節點數量,在setnext方法中判斷是否已經是超過其閾值,超過則不允許該鏈建立,避免無意識地破壞系統效能 抽象處理者 ifndef handler h define handler h include req...
責任鏈模式
責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...
責任鏈模式
有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...