观察者模式:定义一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。在主题对象在状态变化时会通知所有观察者对象,使它们自动更新。
观察者模式
观察者模式 Observer Pattern:又叫发布/订阅模式 Publish/Subscribe,最常用于 GUI 系统,订阅发布系统。
类图结构

结构解析
Subject
抽象类,主题或者是抽象通知者,用于通知所有订阅了该主题的观察对象。ConcreteSubject
实现类,实现主题的具体方法。Observer
抽象类,观察者,订阅主题后,接收主题的通知并更新自己。ConcreteObserver
实现类,实现具体的更新。
示例
1 | // 1. Observer |
Java 语言规范中已经集成了标准的观察者模式 Observable/Observer,其中 Observable 即为主题或抽象通知者,Observer 为观察者。所以 Java 中实现观察者模式非常简单,主题继承 Observable ,观察者实现 Observer。
总结
观察者模式很好的将观察者和主题解耦,使他们的依赖变得很小。观察者模式实现了表示层和业务逻辑层的分离,并定义了消息更新机制,符合“开闭原则”。
观察者模式实际运用中也非常常见,所有 regeister 类型都是观察者模式,如 Android.BroadcastReceiver 广播,数据库更新通知等, 以及第三方 RxJava 库等。
参考文档
- 大话设计模式
Android源码设计模式解析与实战- 观察者模式