目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
例子:
class Observer //观察者
{
public:
virtual void upadte() = 0; //接受通知
};
class Manager // 管理者
{
public:
virtual void registerObserver(Observer* o) = 0; //注册观察者
virtual void notify() = 0; //通知所有的观察者
};
class ManagerImpl: public Manager
{
vector<Observer*> v;
public:
void registerObserver(Observer* o)
{
v.push_back(o);
}
void notify()
{
for(int i=0; i<v.size(); i++)
{
v[i]->upadte();
}
}
};
class FirstObserver: public Observer
{
public:
void upadte()
{
cout << "FirstObserver::upadte()" << endl;
}
};
class SecondObserver: public Observer
{
public:
void upadte()
{
cout << "SecondObserver::upadte()" << endl;
}
};
int main()
{
FirstObserver* f = new FirstObserver();
SecondObserver* s = new SecondObserver();
ManagerImpl* m = new ManagerImpl();
m->registerObserver(f);
m->registerObserver(s);
m->notify();
return 0;
}