設計模式學習(C++實現)9——責任鏈模式
阿新 • • 發佈:2019-02-19
某個事件有一系列的處理者都可能處理,因此將這些處理者用一個連結串列連線起來,將該事件延該連結串列依次傳遞,一旦某個處理者解決該事件就不再繼續傳遞,自定義該連結串列可保證處理者的優先順序,這種模式可以保證系統的處理順序按照設定順序來而不至於變得混亂,可應用於大部分事件處理的地方如log記錄、錯誤處理等。
class Event{
public:
Event(int t):type(t){}
int GetEventType(){
reutrn type;
}
private:
int type;
}
class EventHandler{
public :
EventHandler(int t):type(t){}
bool HandlerEvent(Event &event){
if(event.GetEventType()==type){
std::cout<<type<<"type event has been handlered!"<<std::endl;
return true;
}
else
return false;
}
void SetNextEventHandler(EventHandler* handler){
next=handler;
}
EventHandler* GetNextEventHandler(){
return next;
}
private:
int type;
EventHandler* next=nullptr_t;
}
void main(){
Event event1(2);
EventHandler handler1=new EventHandler(1);
EventHandler handler2=new EventHandler(2);
EventHandler handler3=new EventHandler(3);
handler1->SetNextEventHandler(handler2);
handler2->SetNextEventHandler(handler3);
head=handler1;
while (head!=nullptr_t){
if(head->HandlerEvent(event1))
break;
head=head->GetNextEventHandler();
}
}