概念区别和常见的错误理解辩证:
通俗理解一下
1. Observable 是一条 "水管蓝图" ,每次打开水龙头,水流会按照设计好的路线流向终点。起点和终点一一对应。每次打开水流,都是新的流,水流之间互不影响。一次一管。
2. subject 也是一个水流蓝图,但是只是被设计了一部分,如果有人想用水,把自己家水管接上去,就有水了。 换句话说,起点和重点是一对多关系。
正式一点的理解
Subject继承了Observable类别,并且给予了更多不同的特性,因此我们会说Subject也是另外一种Observable。但是Subject和 Observable有两个明显的不同:
- observable在建立对象的同时,就决定好数据的流向了。但是subject是在产生对象之后才决定数据的流向。
- observable的每个订阅者都会得到独立的数据流,称之为单播(unicast);subject则是每次事件发生之时候,同步传递给所有的订阅者,又称之为多播(multicast)
常见的错误理解
1. 对于subject来说,并非先收集所有的 callbackFunction 再去执行数据流的推送。而是遵循 先来后到,过时不候 这样的原则 。当作水管来理解也很合适:
订阅者1和2,3都是可以收到原始数据流的,但是在中途加入了新的数据流,现在只有订阅者3不仅可以收到原始数据流,也可以收到新的数据流。