前语
在专栏的前两篇分别介绍了ReactiveX和Observable,本篇首要介绍一下呼应式编程里边另一个非常重要的概念Subject。Subject直译过来是主题或科目的意思,这种直译过来让人很难理解其在呼应编程中的真正意义,所以请跟从笔者的脚步,从根底概念一步一步的学习呼应式编程。
Subject
Subject是一种桥或代理,在ReactiveX的某些完结中可用,既充当Observer又充当Observable。由于它是一个Observer,它能够订阅一个或多个Observable;由于它是Observable的,它能够宣布新的项目,它还能够将观察到的项目从头发布。
由于Subject订阅了Observable,它将触发该Observable开端发射项目(假如该Observble是“冷”的,也就是说,假如它在开端发射项目之前等待订阅)。这能够使生成的Subject将原始“冷”Observable变成“热”Observable。
Subject的种类
有四种Subject是为特定的用例而设计的。这些并非在一切完结中都可用,有些完结运用其他命名约定(例如,在RxScala中,将这里的“Subject”称为“PublishSubject”):
AsyncSubject


BehaviorSubject


PublishSubject

请注意,PublishSubject可能会在创立后立即开端发送项目(除非您已采取措施防止这种情况产生),因此在创立Subject和观察者订阅它之间,一个或多个项目可能会丢掉。假如您需要保证从源Observable交给一切项目,您需要运用Create形成Observable,以便手动从头引进“冷”Observable行为(查看一切观察者在开端宣布项目之前是否现已订阅),或者改用ReplaySubject。

ReplaySubject

总结
假如没有呼应式编程根底的小伙伴,独自看本篇文章可能会比较难理解,所以笔者在这里强烈建议结合本专栏前两篇的文章一同看,这样理解的会比较深刻一些。