气象站观察者模式应用

github地址:https://github.com/BaronZ88/DesignPatterns/tree/master/src/com/baron/patterns/observer

观察者模式的定义:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 更直观的说可以叫做发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到。

观察者模式分为两个角色,分别为观察者和被观察着。

1.被观察着:内部状态发生改变时,向观察者发出通知

2.观察者:收取被观察者的通知

观察者模式十一个适应频率非常高的模式,最常用的地方是订阅发布系统、在线游戏等。

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

系统结构:获得气象数据的硬件设备;来自气象站的数据;显示器(用于显示数据

气象数据的实现:

处理信息

显示当前天气状况的显示器:

显示未来天气情况的显示器

气象局的天气数据应用就改造完成了。两个公告牌CurrentConditionsDisplayForecastDisplay实现了ObserverDisplayElement接口,在他们的构造方法中会调用WeatherDataregisterObserver方法将自己注册成观察者,这样被观察者天气数据就会持有观察者的应用,并将它们保存到一个集合中。当被观察者``WeatherData状态发送变化时就会遍历这个集合,循环调用观察者公告牌更新数据的方法。后面如果我们需要增加或者删除公告牌就只需要新增或者删除实现了ObserverDisplayElement`接口的公告牌就好了。

优点:观察者模式将观察者和主题(被观察者)彻底解耦,主题只知道观察者实现了某一接口(也就是Observer接口)。并不需要观察者的具体类是谁、做了些什么或者其他任何细节。任何时候我们都可以增加新的观察者。因为主题唯一依赖的东西是一个实现了Observer接口的对象列表。

猜你喜欢

转载自www.cnblogs.com/lubaobao/p/9847490.html