观察者(observer)模式
来源:互联网 发布:全知视角和限知视角 编辑:程序博客网 时间:2024/06/10 21:45
观察者模式定义了对象间的一对多(1 vs N)依赖关系。多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使之能及时自动更新自己。
具体实例参见博客http://zhangjunhd.blog.51cto.com/113473/68949/
- 创建被观察者类,继承自java.util.Observable;
- 创建观察者类,实现java.util.Observer接口
- 对于被观察者,添加它的观察者:
void addObserver(Observer o)
。方法addObserver()把观察者对象添加到观察者对象列表中,当被观察者事件发生时,执行setChanged();notifyObservers();
Setchanged()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中的所有Observer的update()方法,通知其数据已经发生了变化。只有在setChanged()被调用后,notifyObservers()才会去调用update()。 - 对于观察者类,实现Observer接口的唯一方法update()。
package xianggen.designpattern.observer;import java.util.Observable;/* * 被观察者类 */public class NumObservable extends Observable{ private int data=0; public int getDate(){ return data; } public void setData(int i){ data=i; setChanged(); notifyObservers(); }}
package xianggen.designpattern.observer;import java.util.Observer;import java.util.Observable;/** * * @author xianggen * */public class NumObserver implements Observer{ public void update(Observable o, Object arg){ NumObservable myObservable=(NumObservable) o; System.out.println("data has changed to "+myObservable.getDate()); }}
package xianggen.designpattern.observer;/** * 测试观察者模式, * @author xianggen * 参考:http://zhangjunhd.blog.51cto.com/113473/68949/ */public class SingleTest { public static void main(String args[]){ NumObservable number= new NumObservable(); number.addObserver(new NumObserver()); number.setData(1); number.setData(2); number.setData(3); }}
0 0
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Observer(观察者)模式
- 观察者模式(Observer)
- Observer(观察者模式)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- 淘宝上拉查看图文详情效果
- POJ2251
- 实现Progressbar的背景图片旋转
- 并发容器之CopyOnWriteArrayList和CopyOnWriteArraySet
- 观察者(observer)模式
- Xposed开发入门笔记
- AOP编程之后置通知、环绕通知、异常通知、引入通知
- Block的简单识记
- jpg转换成PDF 如何将多张图片合成一个PDF文件
- 给 Android 初学者的 Gradle 知识普及
- 记录一些小点 [随时更新] [神犇勿进] (2)
- 虚拟机改mac地址,一定要关机才能生效呀,惨痛教训
- Linux开发工具(gcc gdb make shell)——GCC中-I -L -l区别