观察者模式

观察者模式的定义

在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象就会收到通知并自动更新。

其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅了就收不到信息。

观察者模式结构图

该模式包含四个角色

抽象主题

该角色是一个抽象类或者接口,定义了增加、删除、通知观察者对象的方法

具体主题

该角色实现抽象主题,定义了一个集合存入注册过的具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知

抽象观察者角色

定义一个接口,在得到主题通知时更新自己

具体观察者角色

该角色是具体的观察者对象,在得到具体主题更改通知 时更新自身的状态

简单的代码逻辑

有一个非常经典的Oberver设计模式实例 在本例中,事情发生的顺序应该是这样的:警报器和显示器告诉热水器,它对它的温度比较感兴趣(注册)。热水器知道后保留对警报器和显示器的引用。热水器进行烧水这一动作,当水温超过95度时,通过对警报器和显示器的引用,自动调用警报器的MakeAlert()方法、显示器的ShowMsg()方法。

比如说,如果我们不光想获得热水器的温度,还想在Observer端(警报器或者显示器)方法中获得它的生产日期、型号、价格,那么委托和方法的声明都会变得很麻烦,而如果我们将热水器的引用传给警报器的方法,就可以在方法中直接访问热水器了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190929A0C7UC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励