前面介绍了设计模式中得迭代器模式 ,今天来聊一聊另外一个设计模式- 观察者模式
UP主bei'wei求三连
一.需求:
天气预报项目需求,具体要求如下:
1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如 发布到自己的网站或第三方)。
2) 需要设计开放型API,便于其他第三方也能接入气象站获取数据。【比如小米手机,华为手机的天气预报软件】
3) 提供温度、气压和湿度的接口
4) 测量数据更新时,要能实时的通知给第三方
二.传统方案
WeatherData
类
通过对气象站项目的分析,我们可以初步设计出一个WeatherData类
- 通过get.... 方法,可以让第三方获取信息
- 当数据更新时候,气象站通过dataChange更新数据,第三方在此获取时,就能得到最新的数据,当然也可以推送【redis中有这种功能后面讲解】
问题分析
1)
其他第三方接入气象站获取数据的问题
2)
无法在运行时动态的添加第三方
(
新浪网站
)
3)
违反
ocp
原则
=>
观察者模式
在WeatherData中,当增加一个第三方,都需要创建一个对应的第三方的公告板 对象,并加入到dataChange, 不利于维护,也不是动态加入
三.观察者模式介绍
观察者模式: 对象之间
多对一依赖
的一种设计方案,
被依赖的对象为Subject(
通常也以Notify之类的命名
)【大佬】
,
依赖的对象为Observer【舔狗】
,
Subject
通知
Observer
变化
。
四.观察者模式的好处
1)
观察者模式设计后,会以集合的方式来管理用户
(Observer)
,包括注册,移除和通知。
2)
这样,我们增加观察者
(
这里可以理解成一个新的公告板
)
,就不需要去修改核 心类WeatherData
不会修改代码,遵守了
ocp
原则。