Subject 定义和解析
AsyncSubject 异步主题
BehaviorSubject 行为主题
PublishSubject 解体主题
ReplaySubject 重播主题
Subject 定义和解析
主题是一种在ReactiveX的某些实现中可用的桥梁或代理,它既充当观察者又充当Observable。
因为它是观察者,所以可以订阅一个或多个Observable,并且因为它是Observable,
所以可以通过释放它们来观察它所观察的项,还发出新的项。
因为一个主体订阅了一个Observable,它将触发Observable开始发出项目(如果Observable是“冷”的,也就是说,
如果它在开始发出项目之前等待订阅)。 这可以使最终的主题成为原始“冷”可观察对象的“热”可观察变量。
Thinking in words
Subject一般用于bridge或proxy,其实它什么都可以,特殊情况下作为bridge或proxy来使用;
Subject比较特殊,既可以当作Observer,又可以当作Observable,观察者是实体观察对象,
观察者必须要有Observable的来配对,那么Subject怎么进行工作的呢?
输出条件:必须要有订阅者,指定观察变量
其中,无论主题是cold还是hot,在订阅之前统统当作cold来处理,订阅之后统统当作hot来通知
输出结果
代码示例
public class No19_Subject : MonoBehaviour
{
void Start()
{
Subject<int> subject = new Subject<int>();
// Subject作为Observable
var take = subject.DelayFrame(100).Select(_ => 100);
take.Subscribe(value => Debug.LogFormat("Take: {0}", value));
// Subject作为Observer
subject.Subscribe(Next, Error, Complete);
subject.OnNext(66);
}
void Next(int value)
{
Debug.LogFormat("Next: {0}", value);