《Java设计模式及实践》—3.5 观察者模式
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第3章,第3.5节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.
3.5 观察者模式
随着本书的进展,我们不断提到解耦的重要性。当减少依赖关系时,我们可以扩展、开发和测试不同的模块,而无须了解其他模块的实现细节,只需要知道它们实现的抽象。
尽管如此,在实践当中,模块是需要协同工作的。一个对象往往能够知道另一个对象的变化。例如在游戏中实施汽车类,汽车的引擎需要知道加速器何时改变其位置。一般的解决方案是创建一个引擎类,一直轮询检查加速器位置,看它是否已经改变。而更智能的方法是使加速器调用引擎以通知它有关更改。但如果想得到设计良好的代码,这还不够。
如果加速器(Accelerator)类保留对引擎(Engine)类的引用,当需要在屏幕上显示Accelerator的位置时会发生什么?最好的解决方案是让两者都依赖于抽象,而不是让加速器依赖于引擎。
1.目的
观察者模式使得一个对象的状态改变时,已经登记的其他对象能够观察到这一改变。
2.实现
观察者模式的类图如图3-6所示。
观察者模式依赖于以下类:
Subject(主题):主题通常是由类实现的可观察的接口。应通知的观察者使用attach方法注册。当它们不再需要被告知变更时,使用detach方法取消注册。
图 3-6
ConcreteSubject(具体主题):具体主题是一个实现主题接口的类。它处理观察者列表并更新它们的变化。
Observer(观察者):观察者是一个由对象实现的接口,应该根据主题中的更改来进行更新。每个观察者都应该实现update方法,该方法通知它们新的状态变化。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)