**基于map的观察者监听者设计模式
《1》回调函数
《2》MVC框架**(如下图所示)
观察者通过搜索得到都有谁对这个事件感兴趣,就告诉那些对该事件感兴趣的监听者去处理该事件,很明显一个事件和对该事件感兴趣的监听者是键值映射关系,故使用map.
版本一:监听者和观察者在同一个线程中
#include <iostream>
#include <memory>
#include <map>
#include <vector>
#include <string>
using namespace std;
class Listener
{
public:
Listener(string name):_name(name){}
virtual void handleMessage(int msgid)=0;
string _name;
};
class Listener1:public Listener
{
public:
Listener1(string name):Listener(name){}
void handleMessage(int msgid)
{
cout<<_name<<" ";
switch(msgid)
{
case 0:
cout<<" handle 0 msgid!"<<endl;
break;
case 1:
cout<<" handle 1 msgid!"<<endl;
break;
default:
cout<<" handle invalid msgid!"<<endl;
break;
}
}
};
class Listener2:public Listener
{
public:
Listener2(string name):Listener(name){}
void handleMessage(int msgid)
{
cout<<_name<<" ";
switch(msgid)
{
case 0:
cout<<" handle 0 msgid!"<<endl;
break;
case