传统的设计方案
通过对气象站项目的分析,我们可以初步设计出一个WeatherData类

说明:
1)通过getXxx方法,可以让第三方接入,并得到相关信息
2)当数据有更新时,气象站通过调用dataChange() 去更新数据,当第三方再次获取时,就能得到最新数据,当然也可以推送

CurrentConditions(当前的天气情况),可以理解成是我们气象局的网站 (推送)
代码实现:
https://gitee.com/luan_hao/design-pattern/tree/master/src/main/java/com/lh/observer
其他第三方接入气象站获取数据的问题
无法在运行时动态的添加第三方 (新浪网站)
违反 ocp 原则=> 引出了观察者模式
在 WeatherData 中,当增加一个第三方,都需要创建一个对应的第三方的公告板对象,并加入到 dataChange, 不利于维护,也不是动态加入
public void dataChange() {
currentConditions.update(getTemperature(), getPressure(), getHumidity());
}
Observer:接收输入
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为 Subject,依赖的对象为 Observer,Subject通知 Observer 变化,比如这里的奶站是 Subject,是 1 的一方。用户时 Observer,是多的一方。

代码实现:
https://gitee.com/luan_hao/design-pattern/tree/master/src/main/java/com/lh/observer/improve