观察者模式
来源:互联网 发布:windows下php exec 编辑:程序博客网 时间:2024/05/01 02:44
在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。例如在文档/视图结构中,文档被修改了,视图就会得到通知。
java.util.Observable中有两个方法对Observer特别重要,一个是setChange()方法用来设置一个内部标志位注明数据发生了变化;一个是notifyObservers()方法会去调用一个列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update(),否则什么都不干。
Observer通过Observable的addObserver()方法把自己添加到这个列表中。这个列表虽然由Observable拥有,但Observable并不知道到底有哪些Observer正在观察等待通知。Observable只提供一个方法让Observer能把自己添加进列表,并保证会去通知Observer发生了变化。通过这种机制,可以有任意多个Observer对Observable进行观察,而不影响Observable的实现。
Observable类有两个私有变量:
一个boolean型的标志位,setChange()将它设为真,只有它为真时,notifyObservers方法才会调用Observer的update方法,
clearChange()设标志位为假,
hasChange返回当前标志位的值。
另一个是一个Vector,保存着一个所有要通知的Observer列表,
addObserver添加Observer到列表,
deleteObserver从列表中删除指定Observer,
deleteObservers清空列表,
countObservers返回列表中Observer的数目, 在Observer对象销毁前一定要用deleteObserver将其从列表中删除,不然因为还存在对象引用的关系Observer对象不会被垃圾收集,
造成内存泄漏,并且已死的Observer仍会被通知到,有可能造成意料外的错误,而且随着列表越来越大,notifyObservers操作也会越来越慢
http://blog.csdn.net/zhouyongyang621/article/details/5750702
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 关于HttpClient上传中文乱码的解决办法
- Android5.1 FrameWork添加自己的SystemService提供API给APP
- 测试服务器的运算速度
- 默认构造函数-(无关、有关)
- PHP内核变量访问宏
- 观察者模式
- 建行E商贸通支付开发系列之一(了解E商贸通)
- cloud manager安装 下载
- 解决“adb不是内部或者外部命令”的方法
- FFMPEG Tips (1) 如何打印日志
- C程序编译执行过程
- JS中的childNodes的兼容性问题
- 自定义ViewGroup动态显示添加view的位置
- [存储] Cobar使用文档(可用作MySQL大型集群解决方案)