//---------------------------------------------------------------------------- // // Copyright (C) Intel Corporation, 2006 - 2007. // // File: ObserverPattern.h // // Contents: An implementation of the Observer design pattern. // // Notes: //---------------------------------------------------------------------------- #ifndef _OBSERVER_PATTERN_H__ #define _OBSERVER_PATTERN_H__ #include using namespace std; class Observer_Pattern_Observer { public: Observer_Pattern_Observer() {} virtual ~Observer_Pattern_Observer() {} virtual int update() = 0; }; class Observer_Pattern_Subject { public: Observer_Pattern_Subject():observers() {} virtual ~Observer_Pattern_Subject() {} virtual int attach(Observer_Pattern_Observer * observer) { observers.push_back(observer); return 0; } virtual int detach(Observer_Pattern_Observer * observer) { vector::iterator iter; for (iter = observers.begin(); iter != observers.end(); ++iter) { if (*iter == observer) { observers.erase(iter); return 0; } } return -1; } virtual int notify() { vector::iterator iter; for (iter = observers.begin(); iter != observers.end(); ++iter) { (*iter) -> update(); } return 0; } private: vector observers; }; #endif /* _OBSERVER_PATTERN_SUBJECT_H__ */