// ********** ObserverDemo.cpp ********** #include #include using namespace std; class Observable; class Observer { public: virtual void update(Observable* o) = 0; }; const int MAX_OBS = 500; class Observable { private: Observer* observers[MAX_OBS]; int num_observers; public: Observable() { num_observers = 0; } void addObserver(Observer* o) { if (num_observers < MAX_OBS) observers[num_observers++] = o; } void notifyObservers() { for (int i=0; iupdate(this); } } }; class Observable1 : public Observable { private: int value; public: Observable1() { value = 0; } int getValue() { return value; } void setValue(int newvalue) { value = newvalue; notifyObservers(); } }; class Observer1 : public Observer { public: void update(Observable* o) { int value = ((Observable1*)o)->getValue(); } }; int main() { hrtime_t t1 = gethrtime(); Observer1* observers[MAX_OBS]; Observable1* observables[MAX_OBS]; for (int i=0; iaddObserver(observers[i]); } for (int k=0; k<100; k++) for (int j=0; jsetValue(k); hrtime_t t2 = gethrtime(); cout << (t2-t1)/1000000 << " "; return 1; }