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,完成了一次事件流的傳輸

發佈了54 篇原創文章 · 獲贊 118 · 訪問量 131萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章