c 責任鏈模式

2021-05-27 11:27:54 字數 2306 閱讀 8076

責任鏈模式(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 ...