观察者模式有叫发布订阅模式,它定义了一种一对多的依赖关系,让多个观察者监听同一个主题,
当主题对象状态发生变化时,回通知所有观察者,使它们能自动更新自己。(大话设计模式)。
具体代码如下:
//主题的基类 class Subject { private: std::string _sAction; public: void setAction(std::string strAction){_sAction=strAction;}; std::string getAction(){return _sAction;}; Subject(){}; virtual ~Subject(){}; virtual void Attach(Observer* pObserver)=0; virtual void Detach(Observer* pObserver)=0; virtual void Notify()=0; }; |
//观察者的基类 class Observer { private: std::string _sName; //Subject *_pSubject; public: Observer():_sName(""){}; Observer( std::string sName):_sName(sName) { }; std::string getName(){return _sName;}; void setName(std::string sName) { _sName=sName; }; virtual ~Observer(){}; virtual void Update()=0; }; |
一个主题可以有多个观察者订阅,通过调用Attach和Detach订阅和取消订阅。发布者通过在Notify
函数中调用观察者的Updata方法,通知订阅者更新数据。