当应用程序处理随时间出现的事件流(例如,用户登录、GUI事件和推送通知)时,Observable是不可战胜的。我们从来没有提到它,但是从1.0版开始,Java就提供了 java.util.Observable,它允许注册Observer(即观察者)并同时通知他们。但它缺乏以下几点:
- 组合功能(没有操作符)
泛型(Observer有一个update()方法,获取表示任意通知有效负载的Object)
性能(synchronized关键字无处不在,在内部java.util.Vector)
关注点分离(在某种意义上,它将Observable 和PublishSubject结合在一个接口了)
并发支持(所有的观察者都会被串行的通知)
不变性
JDK中的Observable ,是我们在标准Java中获得的关于事件的声明式建模的最好方法,还有GUI包中的addListener()方法。如果您的领域显式地提到事件或数据流,则 rx.Observable<T>则无人能敌。声明式的表达与广泛的操作符家族相结合,可以解决您可能遇到的许多问题。对于Cold类型的Observable,您可以利用背压来控制吞吐量,而在Hot类型的Observable的情况下,您可以使用许多流控制操作符,比如buffer()。