原文链接:http://www.2cto.com/kf/201310/253013.html
如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口。
123456789101112131415161718192021222324252627282930313233343536373839404142434445 | 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) ; // 输出房子价格
} }; |
新闻热点
疑难解答