通过查看源码,发现Observable 是一个空的接口, Subscribers 是一个实现了Observable 的抽象类,
public interface Observer {}
public abstract class Subscriber implements Observer, 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() 方法,绑定Observable与Subcribler或者Observabler
很显然,Observable对象发生动静,然后通信Subcribers,然后Subcribers实现自己的业务逻辑。
在Android中Rxjava和RxAndroid 底层原理实现就有用到这两者.
然后: Observable 有三种创建方式:
方式一:
create方法创建:
final Observable mObservable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("How are you?");
subscriber.onNext("Yes,i\'m fine,thank you!");
subscriber.onCompleted();
}
});
final Subscriber mTestSubscriber = new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
}
};
需要的地方调用:mObservable.subscribe(mTestSubscriber); 即可
方式二:
通过just方法:
Observable testJust = Observable.just("Hello","How are you?","yes,i\'m fine,thank you!");
方式三:
通过from方法创建:
Observable testFrom = Observable.from(new String[]{"Hello","How are you?","yes,i\'m fine,thank you!"});
或者这种:
List lists = new ArrayList<>();
lists.add("Hello");
lists.add("How are you?");
lists.add("yes,i'm fine,thank you!");
Observable testFrom1 = Observable.from(lists);
这三种方式:
那just和from的又是什么关系
public final static Observable just(T t1, T t2) {
return from(Arrays.asList(t1, t2));
}
未完待续...