观察者模式Java实现与自己实现的对比
- 不需要再定义观察者和目标接口(JDK已经定义)。
- 具体的目标实现里面不需要再维护观察者的注册信息,Java中的Observable类里面已经实现。
- 触发通知的方式有一点变化,要先调用setChanged方法,这个是Java为了帮助实现更精确的触发控制而提供的功能。
- 具体观察者的实现里面,update方法其实能同时支持推模型和拉模型,这个Java在定义的时候,已经考虑。
使用Java提供的接口实现天气实例
定义目标对象类,并且继承Java中的Observable类:
1 | package com.wy.observer.example_by_java; |
定义观察者对象,并实现Observer接口:
1 | package com.wy.observer.example_by_java; |
编写测试类:
1 | package com.wy.observer.example_by_java; |
测试效果如下:
1 | 黄明的母亲收到了消息,目标推送过来的是明天天气晴朗,蓝天白云,气温28度 |
代码地址详见 PatternTest
参考资料:
GerryZhang 利用Java提供的观察者模式实现