天天看點

rxjava 訂閱者模式的分析

參考http://www.jianshu.com/p/814b63036c78

一開始的時候,被RXJAVA的切換來切換去的源碼弄得頭暈暈的,後面思考了一下其思想,就豁然開朗了

之前做類似訂閱觀察者的模式,我們一般這樣定義的,例如A觀察B,也就是B需要回調事件給A,我們會定義一個listener,這個listener實作了監聽行為

然後A需要實作這個listener

public class A implement listener{

}

B的話則是把這個listener作為一個成員

public class B {

Listener listener;

}

然後通過setListener方法把A作為參數傳到B裡面去,這樣B就可以對A進行回調了

那麼其實rxjava的訂閱關系的思想是相通的

上面的B就是observable(被觀察者),A就是subscriber/observer                (訂閱者),而listener就是定義行為規範。      
(被觀察者)->訂閱->(觀察者)
stringObservable.subscribe(observer);
           

這個訂閱過程就相當于setListener方法,都是把訂閱者observer作為參數傳入到observable中。

subscribe方法最終的執行代碼是

onSubscribe.call(subscriber)
           

會觸發onSubscribe對象裡面的call方法,而call方法裡面會調用subscriber的相關方法

//被觀察者
        Observable<String> stringObservable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("Hello");
                subscriber.onNext("Jenchar");
                subscriber.onCompleted();
            }
        });
           

這樣就回調到了subscriber,完成了一次事件流的傳輸