???????????????????????????????????????????仯??????????????仯????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