1. 问题引入
天气预报项目需求,具体要求如下:
- 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如
发布到自己的网站或第三方)。 - 需要设计开放型API,便于其他第三方也能接入气象站获取数据。
- 提供温度、气压和湿度的接口
- 测量数据更新时,要能实时的通知给第三方
2. 观察者模式(Observer)原理
-
Observer:接收输入
image.png 观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,
依赖的对象为Observer,Subject通知Observer变化,比如这里的奶站是
Subject,是1的一方。用户时Observer,是多的一方。
3. 观察者模式解决天气预报需求
-
思路分析图解(类图)
image.png - 观察者模式的好处
- 观察者模式设计后,会以集合的方式来管理用户(Observer),包括注册,移除
和通知。 - 这样,我们增加观察者(这里可以理解成一个新的公告板),就不需要去修改核
心类WeatherData不会修改代码,遵守了ocp原则。
4. 观察者模式在Jdk应用的源码分析
Jdk的Observable类就使用了观察者模式

image.png
模式角色分析
- Observable 的作用和地位等价于 我们前面讲过Subject
- Observable 是类,不是接口,类中已经实现了核心的方法 ,即管理Observer
的方法 add.. delete .. notify... - Observer 的作用和地位等价于我们前面讲过的 Observer, 有update
- Observable 和 Observer 的使用方法和前面讲过的一样,只是Observable 是
类,通过继承来实现观察者模式

