java observer_Java中的Observer原理的说明

原标题:Java中的Observer原理的说明

上述我们通过案例,来模拟了按钮的监听事件原理,现在我们通过源码来详细的分析它的运行过程:

一、Observer是一个观察者可以实现的接口,它的文档说明如下:

A class can implement the Observer interface when it wants to be informed of changes in observable objects.

Observer中有一个update()方法:

void update(Observable o, Object arg); // Observable 是观察者arg是notifyObservers方法传入的参数

二、Observable是一个被观察者继承的类,它的文档说明大致如下:

This class represents an observable object, or "data" in the model-view paradigm. It can be subclassed to represent an object that the application wants to have observed.

Observable有几个重要的方法,我们简单的介绍一下:

void addObserver(Observer o) // 加入观察者到Vetor中

protected void clearChanged() // 设置change为false

int countObservers() // 返回Vetor中观察者的数量

void deleteObserver(Observer o) // 从Vetor中删除指定的观察者

void deleteObservers() // 删除所有的观察者

void notifyObservers() // 通知Vetor中的观察者

void notifyObservers(Object arg) // 通知Vetor中的观察者,带参数

boolean hasChanged() // 判断是否发生改变

protected void setChanged() // 设置changed为true

三、接下来,我们结合上述的例子来分析Observer的原理:

当执行MyButton button = new MyButton(),由于MyButton是继承Observable,所以下述代码会执行。

private boolean changed = false;

private Vector obs;

public Observable() {

obs = new Vector();

}

当执行button.addObserver(new ClickObserver()),把参数中的Observer存放在上述初始化的Vetor中(为了适应多线程,用的是Vetor)

public synchronized void addObserver(Observer o) {

if (o == null)

throw new NullPointerException();

if (!obs.contains(o)) {

obs.addElement(o);

}

}

当执行button.process("huhx"),如果被观察者发生了改变,就通知Vetor中的观察者去执行update方法。

public void notifyObservers(Object arg) {

Object[] arrLocal;

synchronized (this) {

if (!changed)

return;

arrLocal = obs.toArray();

clearChanged();

}

for (int i = arrLocal.length-1; i>=0; i--)

((Observer)arrLocal[i]).update(this, arg);

}

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值