listener模式

/*
监听者模式
一个listenerCenter,每个listener 对不同的传入参数做不同的事情
把这些listener加入Center列表
然后Center执行做什么事情,调用响应的listener执行事情。
我只需要让center 广播消息,center自会调用事件队列找出对应的对象执行相应的事情
*/
struct Msg
{
int listener;
int event;
};


class StateListener
{
public:
StateListener();
~StateListener();


int name;
void dosomething(int state);
void setName(int n);
};


StateListener::StateListener()
{
}
StateListener::~StateListener()
{
}
void StateListener::setName(int n)
{
name = n;
}
void StateListener::dosomething(int state)
{
switch (state)
{
case 1:
cout << "i am " << name << " fire 1" << endl;
break;
case 2:
cout << "i am " << name << " fire 2" << endl;
break;
}
}


class ListenerCenter
{
public:
ListenerCenter();
~ListenerCenter();
private:
StateListener listenerlist[50];
int count;
public:
void addListener(StateListener l);
void broadcast(Msg msg);
};


ListenerCenter::ListenerCenter()
{
count = 1;
}
ListenerCenter::~ListenerCenter()
{
}
void ListenerCenter::addListener(StateListener l)
{
listenerlist[count++] = l;
}
void ListenerCenter::broadcast(Msg msg)
{
int listener = msg.listener;
int state = msg.event;
if (listener == 0)
{
for (int i = 1; i < count; i++)
{
listenerlist[i].dosomething(state);//广播 全部对象执行
}
}
else
listenerlist[listener].dosomething(state);//单播 对应的listener执行

}


int main()

{

/*
ListenerCenter center;
StateListener s1;
StateListener s2;
s1.setName(1);
s2.setName(2);


center.addListener(s1);
center.addListener(s2);


Msg msg;
msg.listener = 1;
msg.event = 1;
center.broadcast(msg);//1号监听者 事件1 的消息广播


msg.listener = 2;
msg.event = 2;
center.broadcast(msg);//2号监听者 事件2 的消息广播


msg.listener = 0;
msg.event = 2;
center.broadcast(msg);//所有监听者 事件2   消息广播
*/

}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值