概述
某个事件有一系列的处理者都可能处理,因此将这些处理者用一个链表连接起来,将该事件延该链表依次传递,一旦某个处理者解决该事件就不再继续传递,自定义该链表可保证处理者的优先级,这种模式可以保证系统的处理顺序按照设定顺序来而不至于变得混乱,可应用于大部分事件处理的地方如log记录、错误处理等。
代码实现
class Event{
public:
Event(int t):type(t){}
int GetEventType(){
reutrn type;
}
private:
int type;
}
///抽象事件处理类
class EventHandler{
public:
virtual bool HandlerEvent(Event &event) = 0;
void SetNextEventHandler(EventHandler* handler){
next=handler;
}
EventHandler* GetNextEventHandler(){
return next;
}
private:
EventHandler* next=nullptr;
}
///事件处理类1
class Type1EventHandler : public EventHandler{
public:
bool HandlerEvent(Event &event){
if(event.GetEventType()==1){
std::cout<<type<<"event has been handlered!"<<std::endl;
return true;
}
else if(GetNextEventHandler()!=nullptr){
return GetNextEventHandler()->HandlerEvent(event);
} else
return false;
}
}
///事件处理类2
class Type2EventHandler : public EventHandler{
public:
bool HandlerEvent(Event &event){
if(event.GetEventType()==2){
std::cout<<type<<"event has been handlered!"<<std::endl;
return true;
}
else if(GetNextEventHandler()!=nullptr){
return GetNextEventHandler()->HandlerEvent(event);
} else
return false;
}
}
void main(){
Event event1(2);
EventHandler handler1=new Type1EventHandler();
EventHandler handler2=new Type2EventHandler();
handler1->SetNextEventHandler(handler2);
handler1->HandlerEvent(event1);
}
此模式经常配合命令模式一起使用。