好久沒有寫部落格啦,之前看完了《設計模式之禅》也沒有總結一下,現在回憶一下設計模式之觀察者模式。
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測試類
測試輸出:

4.2 既是觀察者又是被觀察者
4.2.1 MultA類
4.2.2 MultB類
4.2.3 Test測試類
輸出結果: