java观察者模式实现问题
import java.util.* ;
class House extends Observable
{ private float price ;
public House(float price)
{ this.price = price ;
}
public void setPrice(float price)
{
this.price = price ;
super.setChanged();
super.notifyObservers(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.println(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) ;
h.setPrice(666666) ;
}
}
上面的程序是一个观察者模式的实现形式,House是观察对象,HousePriceObserver是观察者,这儿运行
输出的结果是:
购房者C观察到价格更改为:
666666.0
购房者B观察到价格更改为:
666666.0
购房者A观察到价格更改为:
666666.0
这儿是C先被通知,但是查看java源码时,观察者 hpo1 hpo2 hpo3按顺序加入到Vector向量中,通知
更新即调用update(Observable o,Object arg)方法时,也是按顺序取向量中的观察者对象,然后观察
者对象调用update()方法,应该先是购房者A观察到价格更改,这儿怎么是C先??
------解决方案--------------------
目测是不是因为vector是后存入的被先读取的问题?