JDK是如何支持观察者模式的?举例说明其实现方式。
参考回答
问题:JDK是如何支持观察者模式的?举例说明其实现方式。
JDK本身通过java.util.Observer
接口和java.util.Observable
类来实现观察者模式。这对类提供了一个简单的机制来实现一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知。
详细讲解与拓展
1. Observable
类
Observable
类是JDK实现观察者模式的核心类。它是一个被观察者类,允许注册多个观察者。当该类的状态发生变化时,所有注册的观察者都会被通知。
addObserver(Observer o)
:向此Observable
对象添加一个观察者。deleteObserver(Observer o)
:从观察者列表中移除指定的观察者。setChanged()
:标记该对象的状态发生了变化。notifyObservers()
:通知所有注册的观察者更新。
2. Observer
接口
Observer
接口用于定义观察者的行为。它只有一个方法:
– update(Observable o, Object arg)
:当被观察对象的状态发生变化时,update()
方法会被调用,通知观察者更新。
3. 代码示例
以下是一个使用JDK内置的观察者模式实现的简单例子:
4. 代码解析
WeatherData
类:是被观察者,继承了Observable
类。它包含了天气数据和更新方法(setMeasurements
)。当数据发生变化时,调用setChanged()
标记数据已变,并通过notifyObservers()
通知所有注册的观察者。-
CurrentConditionsDisplay
类:是观察者,实现了Observer
接口。在update()
方法中,它获取WeatherData
的最新数据并显示。 -
测试:在
WeatherStation
类中,我们创建了一个WeatherData
实例和一个CurrentConditionsDisplay
实例,并注册CurrentConditionsDisplay
为WeatherData
的观察者。当我们调用setMeasurements()
设置新的天气数据时,CurrentConditionsDisplay
会自动接收到通知,并更新显示内容。
5. 输出结果
Current conditions: 80.0F degrees and 65.0% humidity
Current conditions: 82.0F degrees and 70.0% humidity
总结
JDK通过Observable
类和Observer
接口内置了对观察者模式的支持,允许一个对象(被观察者)通知多个依赖于它的对象(观察者)状态变化。使用这种机制非常简单,只需要让被观察者继承Observable
类,让观察者实现Observer
接口,并注册观察者即可。每当被观察者的状态发生变化时,所有注册的观察者会收到通知并更新。