Java常用類庫--觀察者設計模式( Observable類Observer接口)
如果要想實現觀察者模式,則必須依靠java.util包中提供的Observable類和Observer接口。
import java.util.* ; class House extends Observable{ // 表示房子可以被觀察 private float price ;// 價錢 public House(float price){ this.price = price ; } public float getPrice(){ return this.price ; } public void setPrice(float price){ // 每一次修改的時候都應該引起觀察者的注意 super.setChanged() ; // 設置變化點 super.notifyObservers(price) ;// 價格被改變 this.price = price ; } public String toString(){ return "房子價格為:" + this.price ; } }; class HousePriceObserver implements Observer{ private String name ; public HousePriceObserver(String name){ // 設置每一個購房者的名字 this.name = name ; } public void update(Observable o,Object arg){ if(arg instanceof Float){ System.out.print(this.name + "觀察到價格更改為:") ; System.out.println(((Float)arg).floatValue()) ; } } }; public class ObserDemo01{ public static void main(String args[]){ House h = new House(1000000) ; HousePriceObserver hpo1 = new HousePriceObserver("購房者A") ; HousePriceObserver hpo2 = new HousePriceObserver("購房者B") ; HousePriceObserver hpo3 = new HousePriceObserver("購房者C") ; h.addObserver(hpo1) ; h.addObserver(hpo2) ; h.addObserver(hpo3) ; System.out.println(h) ; // 輸出房子價格 h.setPrice(666666) ; // 修改房子價格 System.out.println(h) ; // 輸出房子價格 } };
運行結果:
房子價格為:1000000.0購房者C觀察到價格更改為:666666.0
購房者B觀察到價格更改為:666666.0
購房者A觀察到價格更改為:666666.0
房子價格為:666666.0
最後更新:2017-04-03 14:53:52