天气预报项目需求,具体要求如下

  1. 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方网站)。
  2. 需要设计开放型的API,便于其他第三方也能够接入气象站获取数据。
  3. 提供温度、气压和湿度的接口
  4. 测量数据更新时,要能实时的通知给第三方。

    image.png

    天气预报设计方案1-普通方案

  • 示意图
  • image.png
  1. CurrentConditions(当前的天气情况)
  2. 可以理解成时我们气象局的网站//推送
  • 代码实现

image.png

  • 问题分析
  1. 其他第三方接入气象站获取数据的问题
  2. 无法在运行时动态的添加第三方(新浪网站)
  3. 违反ocp原则==》观察者模式

    image.png

    观察者模式原理

    观察者模式类似于拟定牛奶业务
    1)奶站/气象局:Subject
    用户/第三方网站:Observer

  • Subject:登记注册、移除和通知

image.png

  1. registerObserver 注册
  2. removeObserver 移除
  3. notifyObservers() 通知所有的注册用户,根据不同的需求,可以是更新数据,让用户来取,也可能是实时推送,看具体需求。
  • Observer:接收输入 image.png
  • 观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject 通知 Observer 变化,比如这里的奶站是 Subject ,是1的一方。用户时Object,是多的一方。

    观察者模式解决天气预报需求

    image.png
    image.png

    观察者模式在Jdk应用的源码分析

    image.png