25、java中观察者模式Observable和Observer

如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口

观察者设计模式

现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。

实际上以上的购房者就是观察者,他们所关注的房价就是被观察者

25、java中观察者模式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

 

你可能感兴趣的:(observer)