定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
代码
#include <iostream>
#include <list>
using namespace std;
class Observer { //观察者
public:
virtual void sensorChanger(int state) = 0;
};
class Sensor{//传感器
public:
void Attach(Observer *s){observers.push_back(s);}
void Remove(Observer *s){observers.remove(s);}
void Notify(){
list<Observer *>::iterator iter = observers.begin();
for (;iter !=observers.end(); iter++){
(*iter)->sensorChanger(state);
}
}
virtual void StateChange(int newState) = 0;
protected:
list<Observer *> observers;
int state;
};
class Gravity:public Sensor{ //具体传感器
public:
void StateChange(int newState) {
cout<<"GravitySensor has change"<<endl;
state = newState;
Notify();
}
};
class MyAPP:public Observer{//具体观察者
public:
void sensorChanger(int state){
cout<<"MyAPP get new state:"<<state<<endl;
}
};
使用
int main(){
Observer * myapp = new MyAPP();
Sensor *grasensor = new Gravity();
grasensor->Attach(myapp);
grasensor->StateChange(10); //重力变成了10
return 1;
}
结果
GravitySensor has change
MyAPP get new state:10