日期:2014-05-20  浏览次数:20826 次

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是后存入的被先读取的问题?