通过查看源码,发现Observable 是一个空的接口, Subscribers 是一个实现了Observable 的抽象类,
public interface Observer<T> {}
public abstract class Subscriber<T> implements Observer<T>, Subscription {}
他们通过
mObservable.subscribe(mTestSubscriber);
产生联系, 而为什么是mObservable.subscribe(mTestSubscriber); 这种写法,而不应该是mTestSubscriber.subscribe(mObservable); 这种写法吗?
其实这里面就设计到了一个面向对象的问题了.之前我不是很理解,但是回忆起张孝祥老师讲的java视频,他就抛出一个这样的问题:
人把门打开和关闭,如果是代码的话,应该怎么写?
到底是人打开门,还是门打开人?
张老师说是后者,具体哪个对象拥有改变自身属性的方法,这个方法就应该在哪个对象上。这样的好处应该在并发环境下更明显。
比如一个电话,很多人抢着打。
class Phone{
public synchronized call(){}
}
当调用Phone.call()的时候,如果有人占用,电话是唯一的,其他人自然要等待。但如果要设计成person.callPhone()的时候,问题就没有这么好办了。
Observable事件源,被观察者。
Subcriblers 观察者,事件订阅者
Observer 同Subcribler差不多
subscribe() 方法