閱讀616 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go effective c++條款1:視C++為一個語言聯邦
  下一篇:go 【菜鳥翻譯】1.Building Your First App