设计模式学习(C++实现)9——责任链模式

概述

某个事件有一系列的处理者都可能处理,因此将这些处理者用一个链表连接起来,将该事件延该链表依次传递,一旦某个处理者解决该事件就不再继续传递,自定义该链表可保证处理者的优先级,这种模式可以保证系统的处理顺序按照设定顺序来而不至于变得混乱,可应用于大部分事件处理的地方如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);
}

此模式经常配合命令模式一起使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值