[RxJava學(xué)習(xí)筆記] Observable與Subscriber的關(guān)系

最簡單的觀察者模式

//被觀察者
public class Observable {
    public interface Listener {
        void call();
    }

    Observable.Listener mListener = null;

    public static Observable create(Listener listener) {
        mListener = listener;
    }

    public void someMethod() {
        mListener.call();
    }
}

//創(chuàng)建被觀察者對象, 傳入Observable.Listener對象
Observable observable = Observable.create(new Observable.Listener() {

    @override
    void call() {
      //do something
   }

抽象出來一個觀察者接口(Subscriber), 在調(diào)用被觀察者的方法時被作為參數(shù)回調(diào)

public class Observable {

    public interface onSubscribe {
        void call(Subscriber subscriber);
    }

    Observable.onSubscribe mOnSubscribe = null;

    public static Observable create(onSubscribe pOnSubscribe) {
        mOnSubscribe = pOnSubscribe;
    }

    public void subscribe(Subscriber subscribe) {
        mOnSubscribe.call(subscribe);  //把subscribe作為call方法的參數(shù)回調(diào)
    }
}

//觀察者
public interface Subscriber {
    void onNext(String string);
}

Observable observable = Observable.create(new Observable.onSubscribe() {

    @override
    void call(Subscriber subscriber) {
        //do something
        subscriber.next("1");
        subscriber.next("2");
        subscriber.next("3");
    }
});

這時如果新建一個Subscriber對象, 并將它傳參到observable對象的subscribe方法中:

Subscriber subscriber = new Subscriber() {
    @override
    void onNext(String string) {
      // 打印string
   }
};
observable.subscribe(subscriber);

//subscriber對象打印出
"1"
"2"
"3"

將代碼連貫起來

Observable.create(new Observable.onSubscribe() {
    @override
    void call(Subscriber subscriber) {
        //do something
        subscriber.next("1");
        subscriber.next("2");
        subscriber.next("3");
    }
}).subscribe(new Subscriber() {
    @override
    void onNext(String string) {
      // 打印string
   }
});

RxJava提供了一些Observable的創(chuàng)建方法, 不需要實(shí)現(xiàn)Observable.onSubscribe接口

Observable.just(1, 2, 3, 4) 
.subscribe(new Action1<Integer>() {
   @Override public void call(Integer number) {
       Log.d(tag, "number:" + number);
   }
 });

其中, 在RxJava中Subscriber是Observer的子類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耙蔑,老刑警劉巖复唤,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件居砖,死亡現(xiàn)場離奇詭異雷酪,居然都是意外死亡吴趴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門亭畜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扮休,“玉大人,你說我怎么就攤上這事拴鸵$枳梗” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵劲藐,是天一觀的道長八堡。 經(jīng)常有香客問我,道長聘芜,這世上最難降的妖魔是什么兄渺? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮汰现,結(jié)果婚禮上挂谍,老公的妹妹穿的比我還像新娘。我一直安慰自己瞎饲,他們只是感情好凳兵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著企软,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饭望。 梳的紋絲不亂的頭發(fā)上仗哨,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音铅辞,去河邊找鬼厌漂。 笑死,一個胖子當(dāng)著我的面吹牛斟珊,可吹牛的內(nèi)容都是我干的苇倡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囤踩,長吁一口氣:“原來是場噩夢啊……” “哼旨椒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堵漱,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤综慎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勤庐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體示惊,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡好港,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了米罚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧汹。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖录择,靈堂內(nèi)的尸體忽然破棺而出拔莱,到底是詐尸還是另有隱情,我是刑警寧澤糊肠,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布辨宠,位于F島的核電站,受9級特大地震影響货裹,放射性物質(zhì)發(fā)生泄漏嗤形。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一弧圆、第九天 我趴在偏房一處隱蔽的房頂上張望赋兵。 院中可真熱鬧,春花似錦搔预、人聲如沸霹期。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽历造。三九已至,卻和暖如春船庇,著一層夾襖步出監(jiān)牢的瞬間吭产,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工鸭轮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臣淤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓窃爷,卻偏偏與公主長得像邑蒋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子按厘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容