java.util提供了Observable和Observer 接口,使用它们即可完成观察者模式。需要被观察的类必须继承Observable类,Observable类的常用方法:
public void addObserver(Observer o)
public void deleteObserver(Observer o)
protected void setChanged() 被观察者状态发生改变(设置变化点)
public void notifyObserver(Object arg) 通知所有观察者状态发生改变
每个观察者类都需要实现Observer接口
public interface Observer {
void update(Obervable o, Object arg);
}
此接口只定义了一个update方法,第1个参数表示被观察者实例,第二个参数表示修改的内容。
class House extends Observable {
public void setPrice(float price){
super.setChanged(); // 设置变化点
super.notifyObservers(price); //通知所有观察者价格变化
this.price = price;
}
}
class HouseObserver implements Observer {
public void update (Observable obj, Object arg){
if(arg instanceof Float) {
System.out.println("价格变为" + ((Float) arg).floatValue());
}
}
}
public static void main(String args[]){
House h = new House(10000);
HousePriceObserver hp1 = new HousePriceObserver("购房者A");
h.addObserver(hp1);
h.setPrice(66666);
}