主要思想:
1个目标可以有多个观察者,
当目标更新后,目标主动通知观察者,
不同的观察者通过回调函数完成多态。
/*
观察者模式示例
*/
# include <iostream>
# include <list>
using namespace std;
//目标声明,观察者中用
class BaseSubject;
//抽象的观察者
class AbsObserver {
public:
//更新目标,会传递目标指针,使观察者可以操作目标
virtual void update(BaseSubject *obj) = 0;
};
//目标基类
class BaseSubject {
public:
//添加观察者
virtual void addObserver(AbsObserver *obs) {
observers.push_back(obs);
}
//删除观察者
virtual void delObserver(AbsObserver *obs) {
observers.remove(obs);
}
//通知观察者
virtual void notifyObserver() {
for (list<AbsObserver *>::iterator ite = observers.begin(); ite != observers.end(); ++ite) {
(*ite)->update(this);
}
}
private:
list<AbsObserver *> observers;
};
//具体的观察者1
class Observer1 : public AbsObserver {
public:
virtual void update(BaseSubject *obj) {
cout << "观察者1收到通知并进行操作" << endl;
}
};
//具体的观察者2
class Observer2 : public AbsObserver {
public:
virtual void update(BaseSubject *obj) {
cout << "观察者2收到通知并进行操作" << endl;
}
};
//目标派生类
class DeriveSubject : public BaseSubject {
public:
DeriveSubject() {
cout << "构造目标" << endl;
}
};
int main()
{
Observer1 obs1; //构造观察者1
Observer2 obs2; //构造观察者2
DeriveSubject a; //构造目标
a.addObserver(&obs1); //添加观察者1
a.addObserver(&obs2); //添加观察者2
a.notifyObserver(); //通知观察者
}