#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <vld.h>
using namespace std;
//观察者监听者模式模式
class Listener
{
public:
Listener(string str):_str(str){}
virtual void HandleMessage(int imessage) const = 0;
protected:
string _str;
};
class TestListener1:public Listener
{
public:
TestListener1(string str):Listener(str){}
virtual void HandleMessage(int imessage) const
{
cout << "Listener name:" << _str << endl;
switch(imessage)
{
case 1:
cout << "1 resv!" << endl;
break;
case 2:
cout << "2 resv!" << endl;
break;
case 3:
cout << "3 resv!" << endl;
break;
default:
break;
}
}
};
class TestListener2:public Listener
{
public:
TestListener2(string str):Listener(str){}
virtual void HandleMessage(int imessage) const
{
cout << "Listener name:" << _str << endl;
switch(imessage)
{
case 1:
cout << "1 resv!" << endl;
break;
case 2:
cout << "2 resv!" << endl;
break;
case 3:
cout << "3 resv!" << endl;
break;
default:
break;
}
}
};
class TestListener3:public Listener
{
public:
TestListener3(string str):Listener(str){}
virtual void HandleMessage(int imessage) const
{
cout << "Listener name:" << _str << endl;
switch(imessage)
{
case 1:
cout << "1 resv!" << endl;
break;
case 2:
cout << "2 resv!" << endl;
break;
case 3:
cout << "3 resv!" << endl;
break;
default:
break;
}
}
};
class Observe
{
public:
static void RegisterMessage(const Listener* inlistener, int imessage)
{
map<int, vector<const Listener*>>::iterator it = _map.find(imessage);
if (it == _map.end())
{
_map[imessage].push_back(inlistener);
}
else
{
it->second.push_back(inlistener);
}
}
static void HandleMessage(int imessage)
{
map<int, vector<const Listener*>>::iterator it = _map.find(imessage);
if (it == _map.end())
{
cout << "no Listener interst" << endl;
return ;
}
vector<const Listener*>::iterator vit = it->second.begin();
for (vit; vit!=it->second.end(); ++vit)
{
(*vit)->HandleMessage(imessage);
}
}
private:
static map<int, vector<const Listener*>> _map;
};
map<int, vector<const Listener*>>Observe::_map;
int main()
{
TestListener1 listener1("listener1");
TestListener2 listener2("listener2");
TestListener3 listener3("listener3");
Observe ob;
ob.RegisterMessage(&listener1, 1);
ob.RegisterMessage(&listener1, 2);
ob.RegisterMessage(&listener2, 1);
ob.RegisterMessage(&listener2, 3);
ob.RegisterMessage(&listener3, 2);
ob.RegisterMessage(&listener3, 3);
ob.HandleMessage(1);
ob.HandleMessage(2);
ob.HandleMessage(3);
return 0;
}
C++设计模式_观察者监听者模式
最新推荐文章于 2024-08-20 00:23:27 发布