1 #include <list> 2 3 class Subject; 4 5 class Observer{ 6 public: 7 virtual ~Observer(){}; 8 virtual void update(Subject * sub){}; 9 protected: 10 Observer(){}; 11 12 }; 13 14 class Subject { 15 public: 16 Subject() { }; 17 virtual ~Subject() { }; 18 virtual void attach(Observer* ob) { 19 this->_observers.push_back(ob); 20 } 21 void detach(Observer* ob) { 22 this->_observers.remove(ob); 23 } 24 25 void notify(){ 26 for(auto ob : _observers){ 27 ob->update(this); 28 } 29 } 30 private: 31 std::list<Observer*> _observers; 32 };