一、观察者模式
对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化
二、示例
- Internet气象站项目,气象总部负责提供数据,给第三方的显示平台更新气象数据
1.传统模式
从面向对象的角度设计,在气象总部的对象中添加上第三方平台的对象,有温度,压力等数据更新之后就调用第三方平台对象的刷新方法刷新数据显示
1.气象总部对象
1 | public class WeatherData { |
2.第三方显示模块对象
1 | public class CurrentConditions { |
传统模式存在的问题:
新的其他第三方模块接入气象站获取数据的又需要修改总部的程序
无法在运行时动态的添加或删除第三方显示的模块
2.使用观察者模式后
1、被观察者接口:
1 | /** |
2、自定义观察者接口
1 | /** |
3、自定义的被观察者和观察者实现相应的接口方法
1 | /** |
1 | /** |
4、注册成为观察者进行监听
1 | public class InternetWeather { |
- 通过观察者模式可以实现对象之间的解耦
- 新的第三方平台要接入也无需修改气象总部的对象
- 可动态的添加和移除观察者,灵活方便
三、Java内置的观察者
1、Java内置的观察者
- Observable
- Observer
2、使用Java内置的观察者重新设计项目
- Observable(是类而不是接口)
- Observer(接口)
- 方式同自定义观察者模式类似,被观察者继承Observable,观察者实现Observer接口,将观察者添加到被观察者对象中即可实现动态刷新数据,详见示例代码
四、总结
- 观察者模式的意义在于一对多的情况下数据的动态处理
- 松耦合、高内聚、隔离影响的意义
- Java内置观察者的使用:被观察者继承Observable,观察者实现Observer接口
Java设计模式所有示例代码,持续更新中