觀察者模式與它在源碼中的運用

觀察者模式定義對象間的一種一對多的依賴關係,當被觀察的對象發生變化時,全部的觀察者都將獲得通知進行相應的操做java

過馬路的時候咱們都會看紅綠燈,此時咱們就是觀察者,紅綠燈由紅變成綠的時候,行人和車輛觀察到這個變化,開始穿越馬路,這裏的紅綠燈變化就是可觀察的對象git

訪問流程以下github

Subject這裏就是被觀察的對象,Observer就是觀察者bash

紅綠燈Observer的可運行源碼能夠戳這裏ide

RxJava中對觀察者模式的運用

RxJava學習路徑戳這裏post

Disposable disposable = Observable.just(1).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                LOG.info("accept:{}", integer);
            }
        });
複製代碼

完整能夠運行的源碼能夠戳這裏,查看 justVerify學習

  • Disposable 提供 dispose()方法,能夠解除訂閱關係 (類比detach)
  • Observable 從名字上能夠看出來,它是一個可被觀察的對象(類比 Subject)
  • subscribe 實現訂閱的操做 (類比 attach)
  • Consumer 中的accept 即對觀察到的對象實行的操做(類比 logicHandle)
  • Observer 代碼中沒有出現,可是rxjava本身在內部會經過在調用subscribe的時候,建立 Observer,而後一樣在內部實現調用 onNext (類比Observer與notify)

詳細的源碼追蹤請戳這裏。另值得注意的是 RxJava 是在訂閱的時候就發送了數據ui

一般能夠用觀察者模式的狀況

一個對象的改變須要須要周知到其它對象,作出相應的行爲。可是殊不知道具體有多少對象有待改變或根本不知道具體的對象是誰spa

相關文章
相關標籤/搜索