25、java中观察者模式Observable和Observer
如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口
观察者设计模式
现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。
实际上以上的购房者就是观察者,他们所关注的房价就是被观察者
其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口
具体实现如下
房价的实现
1 class House extends Observable{ 2 private double price; 3 public House(double price){ 4 this.price=price; 5 } 6 public double getPrice(){ 7 return price; 8 } 9 public void setPrice(double price){ 10 if(this.price!=price){ 11 this.price=price; 12 setChanged(); //标注价格已经被更改 13 this.notifyObservers(price); //通知观察者数据已被更改 14 } 15 } 16 @Override 17 public String toString() { 18 return "当前房价为:"+price; 19 } 20 }
购房者实现
1 class HousePriceObserver implements Observer{ 2 private String name; 3 public HousePriceObserver(String name) { 4 this.name=name; 5 } 6 @Override 7 public void update(Observable o, Object arg) { 8 //这里最好判断一下通知是否来自于房价,有可能来自其它地方 9 if(o instanceof House){ 10 System.out.println("购物者"+name+ "观察到房价已调整为:"+arg); 11 } 12 } 13 }
运行
1 House house=new House(10000); 2 HousePriceObserver A=new HousePriceObserver("A"); 3 HousePriceObserver B=new HousePriceObserver("B"); 4 HousePriceObserver C=new HousePriceObserver("C"); 5 house.addObserver(A); 6 house.addObserver(B); 7 house.addObserver(C); 8 System.out.println(house); 9 house.setPrice(6000); 10 house.setPrice(8000);
运行结果为:
当前房价为:10000.0
购物者C观察到房价已调整为:6000.0
购物者B观察到房价已调整为:6000.0
购物者A观察到房价已调整为:6000.0
购物者C观察到房价已调整为:8000.0
购物者B观察到房价已调整为:8000.0
购物者A观察到房价已调整为:8000.0