对象间的联动——观察者模式(四):JDK对观察者模式的支持

撸了今年阿里、腾讯和美团的面试,我有一个重要发现…….

作者:Liuwei-Sunny

出处:https://blog.csdn.net/lovelion


22.4 JDK对观察者模式的支持

观察者模式在Java语言中的地位非常重要。在JDK的java.util包中,提供了Observable类以及Observer接口,它们构成了JDK对观察者模式的支持。如图22-5所示:

20190615100102_1.png

图22-5 JDK提供的Observable类及Observer接口结构图

(1) Observer接口

在java.util.Observer接口中只声明一个方法,它充当抽象观察者,其方法声明代码如下所示:

void  update(Observable o, Object arg);

当观察目标的状态发生变化时,该方法将会被调用,在Observer的子类中将实现update()方法,即具体观察者可以根据需要具有不同的更新行为。当调用观察目标类Observable的notifyObservers()方法时,将执行观察者类中的update()方法。

(2) Observable类

java.util.Observable类充当观察目标类,在Observable中定义了一个向量Vector来存储观察者对象,它所包含的方法及说明见表22-1:

表22-1 Observable类所包含方法及说明

方法名

方法描述

Observable()

构造方法,实例化Vector向量。

addObserver(Observer  o)

用于注册新的观察者对象到向量中。

deleteObserver  (Observer o)

用于删除向量中的某一个观察者对象。

notifyObservers()notifyObservers(Object arg)

通知方法,用于在方法内部循环调用向量中每一个观察者的update()方法。

deleteObservers()

用于清空向量,即删除向量中所有观察者对象。

setChanged()

该方法被调用后会设置一个boolean类型的内部标记变量changed的值为true,表示观察目标对象的状态发生了变化。

clearChanged()

用于将changed变量的值设为false,表示对象状态不再发生改变或者已经通知了所有的观察者对象,调用了它们的update()方法。

hasChanged()

用于测试对象状态是否改变。

countObservers()

用于返回向量中观察者的数量。

我们 可以直接使用Observer接口和Observable类来作为观察者模式的抽象层,再自定义具体观察者类和具体观察目标类,通过使用JDK中的Observer接口和Observable类,可以更加方便地在Java语言中应用观察者模式。

赞(0) 打赏

如未加特殊说明,此网站文章均为原创,转载必须注明出处。Java 技术驿站 » 对象间的联动——观察者模式(四):JDK对观察者模式的支持
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

关注【Java 技术驿站】公众号,每天早上 8:10 为你推送一篇技术文章

扫描二维码关注我!


关注【Java 技术驿站】公众号 回复 “VIP”,获取 VIP 地址永久关闭弹出窗口

免费获取资源

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏