天天看點

設計模式之觀察者模式(Observable與Observer)

好久沒有寫部落格啦,之前看完了《設計模式之禅》也沒有總結一下,現在回憶一下設計模式之觀察者模式。

1.什麼是觀察者模式

  簡單情形:有A、B、C、D等四個獨立的對象,其中B、C、D這三個對象想在A對象發生改變的第一時間知道這種改變,以便做出相應的響應或者對策。

  上面的這種情形,就是觀察者模式。

  當然可以有多個觀察者,多個被觀察者。

  觀察者與被觀察者也不是對立的,一個對象可以觀察其他對象,也可以被其他對象觀察。

2.觀察者模式的應用

  為了更好的了解什麼是觀察者模式,下面我舉一些可能用到該模式的情形或例子:

  (1)周期性任務。比如linux中的周期性任務指令crontab指令,win7下的定時關機指令shutdown -s -t 1200(1200s後關機)。這些指令當預期系統時間到後,就可以通知相應的觀察者激活相應的指令。

  (2)重新加載配置檔案。現在做大型系統基本都會有配置檔案,例如在SSH項目中每次修改配置檔案後,都需要重新啟動伺服器才能使得新的配置檔案生效(當然SSH中貌似已經提供了參數設定,當配置檔案修改時,可以自動重新加載)。

3.觀察者模式需要用到的Java類

  3.1 java.util.Observable

    -able一般可能...的單詞字尾,Observable就是可以被觀察的,程式中的被觀察者類,需要繼承這個類。

  3.2 java.util.Observer

    這個是觀察者,是接口。程式中的觀察者類,需要實作這個接口中的update()方法。

4.程式執行個體+注釋說明

  4.1 身份單一的觀察者(被觀察者)

  4.1.1被觀察者類

  4.1.2觀察者類

  4.1.3 Test測試類

  測試輸出:

  

設計模式之觀察者模式(Observable與Observer)

  4.2 既是觀察者又是被觀察者

   4.2.1 MultA類

  4.2.2 MultB類

  4.2.3 Test測試類

  輸出結果:

    

設計模式之觀察者模式(Observable與Observer)