#ifndef GUARD_observer_h #define GUARD_observer_h #include #include #include class Subject; class Observer { public: Observer(); virtual void update(Subject* subject)=0; }; class Subject { public: virtual ~Subject() {}; void Attach(Observer* obs); void Detach(Observer* obs); void notify(); private: list observers_; }; class ConcreteSubject : public Subject { public: ConcreteSubject(string newname); void SetState(int newstate); int GetState(); string GetName(); private: int state_; string name_; }; class ConcreteObserver : public Observer { public: ConcreteObserver(string newname); void AttachSubject(ConcreteSubject* subject); void DetachSubject(ConcreteSubject* subject); virtual void update(Subject* subject); private: list subjects_; string name_; }; #endif