天天看點

observable java_java中觀察者模式Observable和Observer

如果想要實作觀察者模式,則必須依靠java.util包中提供的Observable類和Observer接口

觀察者設計模式

現在很多的購房者都在關注着房子的價格變化,每當房子價格變化的時候,所有的購房者都可以觀察得到。

實際上以上的購房者就是觀察者,他們所關注的房價就是被觀察者

observable java_java中觀察者模式Observable和Observer

其中要求,被觀察者需要繼承Observable類,觀察則需要實作Observer接口

具體實作如下

房價的實作

observable java_java中觀察者模式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 }

observable java_java中觀察者模式Observable和Observer

購房者實作

observable java_java中觀察者模式Observable和Observer

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 }

observable java_java中觀察者模式Observable和Observer

運作

observable java_java中觀察者模式Observable和Observer

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);

observable java_java中觀察者模式Observable和Observer

運作結果為:

目前房價為:10000.0

購物者C觀察到房價已調整為:6000.0

購物者B觀察到房價已調整為:6000.0

購物者A觀察到房價已調整為:6000.0

購物者C觀察到房價已調整為:8000.0

購物者B觀察到房價已調整為:8000.0

購物者A觀察到房價已調整為:8000.0