标签:
观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。——《HEAD FIRST 设计模式》
我的c++代码
#ifndef DESIGN_OBSERVER_H_ #define DESIGN_OBSERVER_H_ #include <list> class Observer; class Subject { public: void registerObserver(Observer* o); void removeObserver(Observer* o); void notifyObserver(); private: std::list<Observer*> m_obj; }; class Observer { public: virtual void update() = 0; }; class DisplayElement { public: virtual void display() = 0; }; /////////////////////////////////// class WeatherData: public Subject { public: int getTemperature(){return this->t;} int getHumidity(){return this->h;} int getPressure(){return this->p;} private: int t; //temperature int h; //humidity int p; //pressure }; //////////////////////////////////// class CurrentConditionDisplay:public Observer,DisplayElement { public: void update(); void display(); }; class StatisticsDisplay:public Observer,DisplayElement { public: void update(); void display(); }; class ForecastDisplay:public Observer,DisplayElement { public: void update(); void display(); }; class ThirdPartyDisplay:public Observer,DisplayElement { public: void update(); void display(); }; #endif // DESIGN_OBSERVER_H_
#include "observer.h" #include <iostream> void Subject::registerObserver(Observer* o) { this->m_obj.push_back(o); } void Subject::removeObserver(Observer* o) { this->m_obj.remove(o); } void Subject::notifyObserver() { std::list<Observer*>::iterator it = this->m_obj.begin(); for (; it != this->m_obj.end(); ++it) { (*it)->update(); } } //////////////////////////////////////////// void CurrentConditionDisplay::update() { this->display(); } void CurrentConditionDisplay::display() { std::cout << "CurrentConditionDisplay display!" << std::endl; } void StatisticsDisplay::update() { this->display(); } void StatisticsDisplay::display() { std::cout << "StatisticsDisplay display!" << std::endl; } void ForecastDisplay::update() { this->display(); } void ForecastDisplay::display() { std::cout << "ForecastDisplay display!" << std::endl; } void ThirdPartyDisplay::update() { this->display(); } void ThirdPartyDisplay::display() { std::cout << "ThirdPartyDisplay display!" << std::endl; }
标签:
原文地址:http://www.cnblogs.com/foolbread/p/4433634.html