如果想要實現觀察者模式,則必須依靠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