物件間的聯動——觀察者模式(四)
22.4 JDK對觀察者模式的支援
觀察者模式在Java語言中的地位非常重要。在JDK的java.util包中,提供了Observable類以及Observer介面,它們構成了JDK對觀察者模式的支援。如圖22-5所示:
圖22-5 JDK提供的Observable類及Observer介面結構圖
(1) Observer介面
在java.util.Observer介面中只宣告一個方法,它充當抽象觀察者,其方法宣告程式碼如下所示:
void update(Observable o, Object arg); |
當觀察目標的狀態發生變化時,該方法將會被呼叫,在Observer的子類中將實現update()方法,即具體觀察者可以根據需要具有不同的更新行為。當呼叫觀察目標類Observable的notifyObservers()方法時,將執行觀察者類中的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】
相關文章
- 物件間的聯動——觀察者模式(六)物件模式
- 物件間的聯動——觀察者模式(五)物件模式
- 物件間的聯動——觀察者模式(三)物件模式
- 物件間的聯動——觀察者模式(二)物件模式
- 流動的觀察者模式 | Flutter 設計模式Flutter設計模式
- 設計模式-- 觀察者模式Observer(物件行為型)設計模式Server物件
- 設計模式(六)觀察者模式詳解(包含觀察者模式JDK的漏洞以及事件驅動模型)設計模式JDK事件模型
- 觀察者模式模式
- js物件導向之 觀察者模式介紹JS物件模式
- PHP觀察者模式PHP模式
- Unity——觀察者模式Unity模式
- 觀察者模式(2)模式
- Java 觀察者模式Java模式
- JS 觀察者模式JS模式
- 進擊的觀察者模式模式
- ListView中的觀察者模式View模式
- Observable - 觀察者模式的理解模式
- 觀察者模式的總結模式
- 設計模式中的觀察者模式設計模式
- 設計模式----觀察者模式設計模式
- 設計模式 —— 觀察者模式設計模式
- 設計模式(觀察者模式)設計模式
- 設計模式——觀察者模式設計模式
- 設計模式-觀察者模式設計模式
- 設計模式_觀察者模式設計模式
- 【設計模式】觀察者模式設計模式
- 觀察者模式-將訊息通知給觀察者模式
- 協調多個物件之間的互動——中介者模式(三)物件模式
- Java進階篇設計模式之十三 ---- 觀察者模式和空物件模式Java設計模式物件
- 我的Java設計模式-觀察者模式Java設計模式
- PHP-觀察者模式PHP模式
- PHP 之觀察者模式PHP模式
- 大話--觀察者模式模式
- redux與觀察者模式Redux模式
- 觀察者模式介紹模式
- 重構 - 觀察者模式模式
- 觀察者模式(ObserverPattern)模式Server
- observer-觀察者模式Server模式