软件设计模式之观察者模式

观察者模式

概念:观察者模式是一种一对多模式。一个被观察对象管理所有依赖他的观察者对象,当被观察者对象状态发生变化时,将变化通知每一个依赖它的观察者对象,观察者对象在收到消息后处理这样的变化。它主要含有以下两部分:

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(); //
当被观察者发生状态变化时,观察者通过此方法来

//更新自身状态。
}

实用范围:观察者模式可以用于实时监控系统中,因为只有当被观察者对象状态

生变化时才通知观察者,比起观察者主动查询被观察者的方式来说更加节省计算资源。如,多个执行在不同地方窗口程序需要显示服务器中的某一数据,而这样的数据更新频率很低。如果将它设计为窗口程序不断查询服务器数据是否更新,这样将耗费较大的网络资源。而将它设计为观察者模式后,只有当服务器数据发生变化时由服务器主动通知各窗口程序,窗口程序在收到消息后再刷新自身。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值