/*
监听者模式
一个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执行
监听者模式
一个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 消息广播
*/
}