2016 - 2024

感恩一路有你

Java观察者模式

浏览量:2050 时间:2024-01-15 18:28:11 作者:采采

Java观察者模式定义对象间一对多的依赖关系,当一个对象(被观察者)的状态发生改变时,所有依赖于它的对象(观察者)都得到通知并自动更新。JDK中提供的观察者模式的实现是由接口和java.util.Observable类组成的,其中Observer代表观察者,而Observable代表被观察者。

Observable类

Observable类是由被观察者(可有一个或多个观察者)所继承。调用setChanged方法,使得hasChanged方法返回值为true,则再次调用notifyObservers方法会触发观察者的update方法来通知观察者该实例发生变化。

Observer接口

Observer接口中只有一个未实现的update抽象方法,实现该接口的对象称为观察者,该对象要实现update方法。注册了该对象(观察者)的对象(被观察者)实例在调用notifyObservers方法之后,会自动调用观察者中的update方法。

被观察者

被观察者代表热水器,继承Observable类。它具有getTemperature和setTemperature方法来获取和设置水温。boilWater方法用于烧水,当水温达到100度时,调用setChanged方法将hasChanged方法返回值设为true,并调用notifyObservers方法通知观察者。

观察者

观察者I114gBoxDisplayObservable代表显示器,继承Observable类并实现Observer接口。它具有getStatus和setStatus方法用于获取和设置水的状态。displayTemperature方法用于显示当前水温,当水温达到100度时会将状态设为热水,并调用setChanged方法将hasChanged方法返回值设为true,并调用notifyObservers方法通知观察者。

观察者

观察者I114gBoxAlarmObserver代表报警器,实现Observer接口。它具有update方法用于在被观察者状态发生变化时触发报警操作。

测试类

测试类用于运行观察者模式的示例。在main方法中创建了一个热水器对象、一个显示器对象和一个报警器对象。然后通过调用addObserver方法将显示器设置为热水器的观察者,将报警器设置为显示器的观察者。最后调用热水器的boilWater方法来模拟烧水过程。

运行测试类,结果如下:

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。