Java觀察者模式
Java觀察者模式定義對象間一對多的依賴關系,當一個對象(被觀察者)的狀態發生改變時,所有依賴于它的對象(觀察者)都得到通知并自動更新。JDK中提供的觀察者模式的實現是由接口和java.util.Ob
Java觀察者模式定義對象間一對多的依賴關系,當一個對象(被觀察者)的狀態發生改變時,所有依賴于它的對象(觀察者)都得到通知并自動更新。JDK中提供的觀察者模式的實現是由接口和java.util.Observable類組成的,其中Observer代表觀察者,而Observable代表被觀察者。
Observable類
Observable類是由被觀察者(可有一個或多個觀察者)所繼承。調用setChanged方法,使得hasChanged方法返回值為true,則再次調用notifyObservers方法會觸發觀察者的update方法來通知觀察者該實例發生變化。
Observer接口
Observer接口中只有一個未實現的update抽象方法,實現該接口的對象稱為觀察者,該對象要實現update方法。注冊了該對象(觀察者)的對象(被觀察者)實例在調用notifyObservers方法之后,會自動調用觀察者中的update方法。
被觀察者
被觀察者代表熱水器,繼承Observable類。它具有getTemperature和setTemperature方法來獲取和設置水溫。boilWater方法用于燒水,當水溫達到100度時,調用setChanged方法將hasChanged方法返回值設為true,并調用notifyObservers方法通知觀察者。
觀察者
觀察者I114gBoxDisplayObservable代表顯示器,繼承Observable類并實現Observer接口。它具有getStatus和setStatus方法用于獲取和設置水的狀態。displayTemperature方法用于顯示當前水溫,當水溫達到100度時會將狀態設為熱水,并調用setChanged方法將hasChanged方法返回值設為true,并調用notifyObservers方法通知觀察者。
觀察者
觀察者I114gBoxAlarmObserver代表報警器,實現Observer接口。它具有update方法用于在被觀察者狀態發生變化時觸發報警操作。
測試類
測試類用于運行觀察者模式的示例。在main方法中創建了一個熱水器對象、一個顯示器對象和一個報警器對象。然后通過調用addObserver方法將顯示器設置為熱水器的觀察者,將報警器設置為顯示器的觀察者。最后調用熱水器的boilWater方法來模擬燒水過程。
運行測試類,結果如下: