观察者模式
概念:观察者模式是一种一对多模式。一个被观察对象管理所有依赖他的观察者对象,当被观察者对象状态发生变化时,将变化通知每一个依赖它的观察者对象,观察者对象在收到消息后处理这样的变化。它主要含有以下两部分:
1:focus类。它作为此模式中的被观察者。类内部维护着一个数据结构,此结构含有所有观察它的对象。focus类具有添加和移除观察者对象的机制。当focus类的对象发生状态变化时将变化通知给每一个属于它的观察者。
2:observer类。它作为此模式中观察者。类内部含有一个被观察者对象。以及一个可以被被观察者调用的方法。
可以用如下代码来描述他们的关系:
class focus
{
private:
vector<observer *> obsv; // 维护观察者的数据结构
int val;//被观察者状态
public:
void addObserver(observer *o);//添加观察者
void removeObserver(observer *o);//移除观察者
void notifyObserver(); //用于将变化传达给所有观察者
void setVal(int val);//改变自身状态的方法
};
class observer
{
private:
focus *fcs; //表明要观察的对象
public:
observer(focus *fcs) : fcs(fcs){}
void refreshFun(); //当被观察者发生状态变化时,观察者通过此方法来
//更新自身状态。
};
实用范围:观察者模式可以用于实时监控系统中,因为只有当被观察者对象状态
发生变化时才通知观察者,比起观察者主动查询被观察者的方式来说更加节省计算资源。如,多个执行在不同地方窗口程序需要显示服务器中的某一数据,而这样的数据更新频率很低。如果将它设计为窗口程序不断查询服务器数据是否更新,这样将耗费较大的网络资源。而将它设计为观察者模式后,只有当服务器数据发生变化时由服务器主动通知各窗口程序,窗口程序在收到消息后再刷新自身。