#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++设计模式_观察者监听者模式
猜你喜欢
转载自blog.csdn.net/ylh_yanlinghui/article/details/79689933
今日推荐
周排行