Observer 模式应该可以说是应用最多、影响最广的设计模式之一,在系统开发架构设计中有着很重要的地位和意义。
Observer模式的意图是在对象之间定义一种一对多的依赖关系,当一个对象的状态改变时,所有依赖者都将得到通知并自动更新。
举例来说,有一份数据,用不同的图形表示形式,条形图,扇形图等,当数据改变的时候,所有的图像都要发生改变。用结构图表示
suject对它的观察者进行Attach(注册)和Detach(注销)。Observer将监视某个事件的责任委托给Subject,由Suject通过notify来告知Observer事件发生。
class suject
{
public:
void attach(Observer* obs);
void detach(Observer* obs);
void notify()
{
for(int i=0;i<views.size();++i)
views[i]->update(value);
}
private:
int _value;
vector<Observer*> views;
};
这是Suject类的骨架,Suject保存数据和负责通知Observer,用到了Observer的update(使用虚函数继承),是delegation 和 inheritance的组合。在面向对象设计中,出于不同的产品设计逻辑会选择,使用不同的设计模式,一共有23个经典的设计模式,实际上是三大关系composite,delegation和inheritance的组合变形,在设计模式的学习过程中还有很多需要认真研习的。