Observer与Observable关系

 

以下纯粹为自己的理解:

 

Observer观察者;

Observable 被观察者;

 

1.根据文档,Observable有一个管理者的集合,在数据发生改变时,可以通知所有观察者对象;

2.在构建观察者时,需要加入到被观察者的集合中,被观察者发现在数据改变时,调用setChanged(),标记位,notifyObservers()执行,并可以传递数据;

3.在Observer中,回调update(),得到数据根据需要执行下一步;

4.Observer对象销毁前一定要用deleteObserver将其从列表中删除,不然因为还存在对象引用的关系,Observer对象不会被垃圾收集,造成内存泄漏,并且已死的Observer仍会被通知到,有可能造成意料外的错误,而且随着列表越来越大,notifyObservers操作也会越来越慢。

附上Observable方法:

 

addObserver

public void addObserver(Observer o)
如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。未指定向多个观察者发送通知的顺序。请参阅该类的注释。

参数:
o - 要添加的观察者。
抛出:
NullPointerException - 如果参数 o 为 null。


deleteObserver

public void deleteObserver(Observer o)
从对象的观察者集合中删除某个观察者。向此方法传递 null 将使其无效。

参数:
o - 要删除的观察者。

notifyObservers

public void notifyObservers()
如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。

每个观察者都有其 update 方法,其调用参数有两个:observable 对象和 null。换句话说,此方法等效于:

notifyObservers(null)

另请参见:
clearChanged(), hasChanged(), Observer.update(java.util.Observable, java.lang.Object)

notifyObservers

public void notifyObservers(Object arg)
如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。

每个观察者都有其 update 方法,其调用参数有两个:observable 对象和 arg 参数。

参数:
arg - 任意对象。
另请参见:
clearChanged(), hasChanged(), Observer.update(java.util.Observable, java.lang.Object)


deleteObservers

public void deleteObservers()
清除观察者列表,使此对象不再有任何观察者。


setChanged

protected void setChanged()
标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true


clearChanged

protected void clearChanged()
指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以 hasChanged 方法将返回 falsenotifyObservers 方法自动调用此方法。

另请参见:
notifyObservers(), notifyObservers(java.lang.Object)

hasChanged

public boolean hasChanged()
测试对象是否改变。

返回:
当且仅当在此对象上最近调用了 setChanged 方法,而不是 clearChanged 方法时,才返回 true;否则返回 false
另请参见:
clearChanged(), setChanged()


countObservers

public int countObservers()
返回 Observable 对象的观察者数目。

返回:
对象的观察者数目。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值