在工程中做代码的时候,经常会需要用到某个状态发生变化,要通知到需要了解该变化的类,Windows编程中经常用到的是发消息,要是没有Windows的消息机制的话,自己做一套消息机制倒是可以,但也是徒增了工作量,再次想到了设计模式中的观察者模式,也可以实现这个想法,具体实现如下:
1、编写观察者和被观察者类,对该类做如下说明如下:
1.1、观察者类,需要从Observer类继承,并且重写虚函数update()
1.2、被观察者类,需要继承Observable类,并且调用addObserver()函数,添加观察者类的对象
代码如下:
#ifndef__OBSERVER_H #define__OBSERVER_H #include<vector> #include<algorithm> #include<string> #include"YtEvent.h" classObservable; classObserver { public: virtualvoidupdate(Observable*from,YtEvent*e)=0; }; classObservable { private: std::vector<Observer*>_observers; public: Observable(){} virtual~Observable() { _observers.clear(); } //AdditionofObserver voidaddObserver(Observer*ob) { if(std::find(_observers.begin(),_observers.end(),ob)==_observers.end()) { _observers.push_back(ob); } } //DeletionofObserver voiddeleteObserver(constObserver*ob) { std::vector<Observer*>::iteratori=std::find(_observers.begin(),_observers.end(),ob); if(i!=_observers.end()) { _observers.erase(i); } } //ItnotifiesObserver voidnotifyObservers(YtEvent*e=NULL) { std::vector<Observer*>::reverse_iteratori=_observers.rbegin(); while(i!=_observers.rend()) { (*i++)->update(this,e); } } intcountObservers()const { return(int)_observers.size(); } }; #endif//__OBSERVER_H |