中关村在线

软件

Java观察者模式详解

在Java中,观察者模式用于建立对象之间一对多的依赖关系。当某个对象(即被观察者)的状态发生变化时,所有依赖它的对象(即观察者)都会收到通知,并自动进行相应更新。JDK为该模式提供了基础支持,主要由两个组件构成:java.util.Observer接口和java.util.Observable类。前者用于定义观察者的更新行为,后者则代表可被监控的对象,通过两者的协作实现松耦合的对象间通信,适用于事件处理、数据同步等场景。

1、 Observable类供被观察者继承,支持一个或多个观察者的订阅。当调用setChanged方法后,hasChanged方法将返回true,表示对象状态已改变。此时若调用notifyObservers方法,便会触发所有观察者的update方法,通知它们被观察对象已发生变动,从而实现状态的自动通知与同步更新。

2、 Observer接口仅包含一个未实现的抽象方法update,实现了该接口的对象被称为观察者,需自行实现update方法。当某个对象(被观察者)注册了该观察者后,在调用notifyObservers方法时,系统会自动触发所有已注册观察者的update方法,从而实现状态变更的通知与响应,形成观察者与被观察者之间的联动机制。

3、 被观察者I114gBoxHeaterObservable.java用于表示热水器,继承自Observable类,其具体实现方式如下所示。

4、 /**

5、 热水器作为被监控的对象

6、 *

7、 *

8、 */

9、 水温

10、 }

11、 }

12、 加热水至沸腾

13、 从水温15度开始,循环检测温度是否在10到100度之间,持续进行升温处理。

14、 调用setChanged()后,hasChanged()方法会返回true。

15、 当被观察对象的状态发生改变时,其注册的监听者会收到通知并执行相应的更新操作。

16、 }

17、 }

18、 }

19、 该类名为I114gBoxDisplayObservable.java,兼具观察者与被观察者的双重角色,用于表示显示器。它继承自Observable类,并实现了Observer接口,通过这种设计实现状态的监听与更新,具体实现方式如下所示。

20、 /**

21、 显示器作为观察者监视热水器,同时作为被观察者接受报警器的监控。

22、 *

23、 *

24、 */

25、 }

26、 }

27、 显示当前水温

28、 水烧开时

29、 }

30、 记录日志:当前水的状态为+状态+,水温为+温度+度。

31、 }

32、 当被观察对象状态变化时,触发此方法执行。

33、 }

34、 }

35、 观察者I114gBoxAlarmObserver.java 是一个报警器类,实现了Observer接口,用于监听和响应特定事件,具体实现方式如下所示。

36、 /**

37、 报警器即为观察者

38、 *

39、 *

40、 */

41、 水开时调用此方法

42、 }

43、 警报触发

44、 水已烧开,滴滴提示音响起,提醒及时关火。

45、 }

46、 }

47、 Test.java为观察者模式的测试类,具体实现代码如下所示。

48、 /**

49、 观察者模式测试代码示例

50、 *

51、 *

52、 */

53、 添加观察者

54、 显示器用于观察热水器运行状态。

55、 报警器用于监控显示器状态

56、 煮水

57、 }

58、 }

59、 执行测试类,输出结果如下

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具