Java观察者模式
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方法来模拟烧水过程。
运行测试类,结果如下:
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。