C++デザインパターン_オブザーバリスナーモード 3076 ワード C++ #include #include #include #include #include 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>::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>::iterator it = _map.find(imessage); if (it == _map.end()) { cout << "no Listener interst" << endl; return ; } vector::iterator vit = it->second.begin(); for (vit; vit!=it->second.end(); ++vit) { (*vit)->HandleMessage(imessage); } } private: static map> _map; }; map>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; } seleniumを利用して自動的に教育品質評価を完成する python/pandas/numpyデータ解析(十一)-相関係数と共分散