/**
* 观察者模型实例
*
*/
import java.util.Observable;
import java.util.Observer;
public class ViewerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
House h=new House(10000);
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);
}
}
/**
* 创建被观察者类,继承Observable类,在实体的set方法中一般继承父类的setChanged(), super.notifyObservers(Object obj)
*/
class House extends Observable {
private float price;
public House(float price){
this.price=price;
}
/**
* @return the price
*/
public float getPrice() {
return price;
}
/**
* @param price the price to set
*/
public void setPrice(float price) {
super.setChanged();
super.notifyObservers(price);
this.price = price;
}
public String toString(){
return "房子的价格为:" +this.price;
}
}
/*
* 创建观察者类,其实Observer接口,Observer接口就一个方法update(),重写时一般判断一下参数类型是否正确。
*/
class HousePriceObserver implements Observer {
private String name;
public HousePriceObserver(String name){
this.name=name;
}
public void update(Observable obj, Object arg) {
if(arg instanceof Float){
System.out.print(this.name+"观察到的价格为:");
System.out.println(((Float)arg).floatValue());
}
}
}