观察者是一种行为设计模式, 允许一个对象将其状态的改变通知其他对象
观察者模式提供了一种作用于任何实现了订阅者接口的对象的机制, 可对其事件进行订阅和取消订阅。
复杂度:
流行度:
使用示例: 观察者模式在 Java 代码中很常见, 特别是在 GUI 组件中。 它提供了在不与其他对象所属类耦合的情况下对其事件做出反应的方式。
这里是核心 Java 程序库中该模式的一些示例:
识别方法: 该模式可以通过将对象存储在列表中的订阅方法, 和对于面向该列表中对象的更新方法的调用来识别。
事件订阅
在本例中, 观察者模式在文本编辑器的对象之间建立了间接的合作关系。 每当 编辑器
(Editor) 对象改变时, 它都会通知其订阅者。 邮件通知监听器
(EmailNotificationListener) 和 日志开启监听器
(LogOpenListener) 都将通过执行其基本行为来对这些通知做出反应。
订阅者类不与编辑器类相耦合, 且能在需要时在其他应用中复用。 编辑器
类仅依赖于抽象订阅者接口。 这样就能允许在不改变编辑器代码的情况下添加新的订阅者类型。
publisher
publisher/EventManager.java: 基础发布者
editor
editor/Editor.java: 具体发布者, 由其他对象追踪
listeners
listeners/EventListener.java: 通用观察者接口
listeners/EmailNotificationListener.java: 收到通知后发送邮件
listeners/LogOpenListener.java: 收到通知后在日志中记录一条消息
Demo.java: 初始化代码
OutputDemo.txt: 执行结果