Advertisement
p1ayer

Observer of C++

Sep 4th, 2014
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Observer
  2.  
  3. #include <list>
  4.  
  5. template <typename Event>
  6. class IObserver {
  7. public:
  8.     virtual void Notify(Event& e) = 0;
  9. };
  10.  
  11. template <typename Event>
  12. class Observer {
  13. typedef typename IObserver<Event> Interface;
  14. private:
  15.     std::list<Interface*> _observers;
  16. public:
  17.     Observer() {}
  18.     virtual ~Observer() {
  19.         deleteObservers();
  20.     }
  21.  
  22.     void HookObserver(Interface* pObj) {
  23.         std::list<Interface*>::iterator iter = _observers.begin();
  24.         while (iter != _observers.end()) {
  25.             if ((*iter) == pObj) {
  26.                 return;
  27.             }
  28.         }
  29.         _observers.push_back(pObj);
  30.     }
  31.  
  32.     int countObservers() {
  33.         return _observers.size();
  34.     }
  35.  
  36.     void UnHookObserver(Interface* pObj) {
  37.         std::list<Interface*>::iterator iter = _observers.begin();
  38.         while (iter != _observers.end()) {
  39.             if ((*iter) == pObj) {
  40.                 _observers.erase(iter);
  41.                 return;
  42.             }
  43.         }
  44.     }
  45.  
  46.     void deleteObservers() {
  47.         _observers.clear();
  48.     }
  49.  
  50.     void Notify(Event& e) {
  51.         std::list<Interface*>::iterator iter = _observers.begin();
  52.         while (iter != _observers.end()) {
  53.             (*iter)->Notify(e);
  54.         }
  55.     }
  56. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement