天气预报项目中的观察者模式

该项目的应用场景是:

  气象局需要我们构建一套系统,这系统有两个公告牌,分别用于显示当前的实时天气和未来几天的天气预报。当气象局发布新的天气数据后,两个公告牌上显示的天气数据必须实时更新。气象局同时要求我们保证程序拥有足够的可扩展性,因为后期随时可能要新增新的公告牌。
 

原理:

  

 

  我们用WeatherDate实现了主题接口,两个公告牌 CurrentConditionsDisplay和ForcastDisplay实现了Observer和DisplayElement接口,在他们的构造方法中会调用WeatherData中的registerObserver()方法把自己注册成观察者,并将他们保存到一个集合中。当被观察者也就是WeatherData数据变化时,会调用notifyObserver()方法通知观察者,也就是两个公告牌,并调用 Updata()方法来更新 自己的数据。

 

该模式的优点:

  1.将观察者(公告牌)和被观察者(气象局)彻底解耦,被观察者只知道观察者列表的抽象接口,被观察者不知道具体的观察者。

  2.被观察者发送通知,所有注册的观察者都会收到信息,可以实现广播机制。

 

最后附上程序的源码地址:https://github.com/BaronZ88/DesignPatterns/tree/master/src/com/baron/patterns/observer

posted on 2018-10-15 21:59  我想做个好人  阅读(620)  评论(0编辑  收藏  举报