一、含义
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
理解:
观察者模式就是一个主题和多个依赖者的关系,当主题发生变化时,依赖者得到通知发生对应的变化。用气象站的例子解释:当气象站(主题)检测到天气情况的改变时,会通知不同的显示器(依赖者)显示出天气的情况。同时,由于显示器自身的不同,显现信息也不一样,如气压显示器显示气压,湿度显示器显示湿度。
二、举例
气象检测应用:
现在有一个WeatherData对象,他有一些方法,现在要通过这个对象,建立三个布告板:目前状况,气象统计和天气预报
我们需要解决的问题:WeatherData对象一旦有新的测量值,就会去更新面板,此外以后还会增加新的面板(WeatherData对象应该对修改封闭,不然每次增加面板就要修改WeatherData的代码会很麻烦)。
观察者类图:
从上图可以知道:
- 要实现观察者一般需要在主题(被观察者)拥有多个多个观察者,一个观察者订阅一个主题(被观察者)
- 主题接口应该有的基本功能就是删除和添加观察者和在满足一定条件时主动发布更新消息的功能。
- 观察者的基本功能就是一个更新信息的功能
*****************************************************************************************
代码实现:
首先是主题和观察者的接口:
具体主题(被观察者)类和观察者类的实现:
可以注意到一个set方法,当天气值被更新时就可以调用通知的方法,再逐一去通知观察者们。
测试:
*******************************************************************************
总结:观察者模式提供了一种松耦合的设计模式,使得改变其中任何一方并不会影响另外一方,只要接口仍被遵守,那么就可以自由改变它们。
应用场景:观察者模式主要用于在关联行为之间建立一套触发机制的场景。观察者模式在现实生活应用也非常广泛,比如:微信朋友圈动态通知、消息通知、邮件通知、广播通知、桌面程序的事件响应等(如下图)。
************************************************************************
参考博客:
https://blog.csdn.net/z55887/article/details/64904350