物件間的聯動——觀察者模式(四)

Liuwei-Sunny發表於2012-07-06

22.4 JDK對觀察者模式的支援

      觀察者模式在Java語言中的地位非常重要。在JDKjava.util包中,提供了Observable類以及Observer介面,它們構成了JDK對觀察者模式的支援。如圖22-5所示:

22-5 JDK提供的Observable類及Observer介面結構圖

      (1)  Observer介面

      在java.util.Observer介面中只宣告一個方法,它充當抽象觀察者,其方法宣告程式碼如下所示:

void  update(Observable o, Object arg);

      當觀察目標的狀態發生變化時,該方法將會被呼叫,在Observer的子類中將實現update()方法,即具體觀察者可以根據需要具有不同的更新行為。當呼叫觀察目標類ObservablenotifyObservers()方法時,將執行觀察者類中的update()方法。

      (2)  Observable

      java.util.Observable類充當觀察目標類,在Observable中定義了一個向量Vector來儲存觀察者物件,它所包含的方法及說明見表22-1

22-1 Observable類所包含方法及說明

方法名

方法描述

Observable()

構造方法,例項化Vector向量。

addObserver(Observer  o)

用於註冊新的觀察者物件到向量中。

deleteObserver  (Observer o)

用於刪除向量中的某一個觀察者物件。

notifyObservers()notifyObservers(Object arg)

通知方法,用於在方法內部迴圈呼叫向量中每一個觀察者的update()方法。

deleteObservers()

用於清空向量,即刪除向量中所有觀察者物件。

setChanged()

該方法被呼叫後會設定一個boolean型別的內部標記變數changed的值為true,表示觀察目標物件的狀態發生了變化。

clearChanged()

用於將changed變數的值設為false,表示物件狀態不再發生改變或者已經通知了所有的觀察者物件,呼叫了它們的update()方法。

hasChanged()

用於測試物件狀態是否改變。

countObservers()

用於返回向量中觀察者的數量。

      我們可以直接使用Observer介面和Observable類來作為觀察者模式的抽象層,再自定義具體觀察者類和具體觀察目標類,通過使用JDK中的Observer介面和Observable類,可以更加方便地在Java語言中應用觀察者模式。

【作者:劉偉   http://blog.csdn.net/lovelion

相關文章