Android 谈谈你对Observable 和 Subscribers 的理解

 通过查看源码,发现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 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));
    }


未完待续...

你可能感兴趣的:(安卓)