使用场景:java
################################大数据
观察者模式是对象的行为模式spa
- 又叫发布-订阅(Publish/Subscribe)模式、
- 模型-视图(Model/View)模式
- 源-监听器(Source/Listener)模式或从属者(Dependents)模式

推模型和拉模型
推模型3d
- 主题对象向观察者推送主题的详细信息,无论观察者是否须要,推送的信息一般是主题对象的所有或部分数据


拉模型日志
- 主题对象在通知观察者的时候,只传递少许信息
- 若是观察者须要更具体的信息,由观察者主动到主题对象中获取,至关因而观察者从主题对象中拉数据


两种模式的比较
- 推模型是假定主题对象知道观察者须要的数据;而拉模型是主题对象不知道观察者具体须要什么数据,没有办法的状况下,干脆把自身传递给观察者,让观察者本身去按须要取值
- 推模型可能会使得观察者对象难以复用,由于观察者的update()方法是按须要定义的参数,可能没法兼顾没有考虑到的使用状况;这就意味着出现新状况的时候,就可能提供新的update()方法,或者是干脆从新实现观察者;而拉模型就不会形成这样的状况,由于拉模型下,update()方法的参数是主题对象自己,这基本上是主题对象能传递的最大数据集合了,基本上能够适应各类状况的须要
JAVA提供的对观察者模式的支持
- 在JAVA语言的java.util库里面,提供了一个Observable类以及一个Observer接口,构成JAVA语言对观察者模式的支持
- 这个类表明一个被观察者对象,有时称之为主题对象。一个被观察者对象能够有数个观察者对象,每一个观察者对象都是实现Observer接口的对象
- 使用时能够分别扩展,Observable类以及Observer接口,建立Watcher对象和 Watched对象