观察者模式:定义一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。在主题对象在状态变化时会通知所有观察者对象,使它们自动更新。
观察者模式
观察者模式 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
源码设计模式解析与实战- 观察者模式