00001 #ifndef __Observer__ 00002 #define __Observer__ 00003 00004 #include <list> 00005 00006 using namespace std; 00007 00008 00009 class Observer; 00010 class Observable; 00011 00012 00013 /***************************************************** 00014 * Observable base class 00015 *****************************************************/ 00016 00017 class Observable { 00018 public: 00019 void attach(Observer* observer); 00020 void detach(Observer* observer); 00021 00022 void notify(); 00023 00024 protected: 00025 list<Observer*> _observers; 00026 }; 00027 00028 00029 00030 00031 00032 /***************************************************** 00033 * Observer base class 00034 *****************************************************/ 00035 00036 class Observer { 00037 public: 00038 void attach(Observable* observable); 00039 void detach(Observable* observable); 00040 00041 virtual void notify(Observable* observable) = 0; 00042 }; 00043 00044 00045 #endif