Subject是一种桥接器或代理,可以在一些ReactiveX的某些实现中使用,它既充当观察者又充当事件源。因为它是一个观察者,它可以订阅一个或多个事件源,而且它又是一个事件源,它可以通过重新发送它观察到的事件来传递事件,并且它也可以发出新事件。
由于一个Subject订阅一个事件源,它可以触发这个事件源开始发出事件(如果那个事件源是"冷"的--就是说,它等待有订阅才开始发出事件)。因此有这样的效果,Subject可以把原来那个"冷"的事件源变成"热"的。
针对不同的场景一共有四种类型的Subject
。他们并不是在所有的实现中全部都存在,而且一些实现使用其它的命名约定(例如,在RxScala中Subject被称作PublishSubject):
待定
待定
如果你有一个Subject
并且想要将其传递给其他客户端而不暴露其Subscriber
接口,则可以通过调用其asObservable
方法来掩盖它,该方法将Subject返回为单纯的事件源。
AsyncSubject
BehaviorSubject
PublishSubject
ReplaySubject
如果你有一个Subject
并且想要将其传递给其他客户端而不暴露其Subscriber
接口,则可以通过调用其asObservable
方法来掩盖它,该方法将Subject返回为单纯的事件源。
AsyncSubject
BehaviorSubject
PublishSubject
ReplaySubject
待定
待定
AsyncSubject
BehaviorSubject
ReplaySubject
待定
待定
待定