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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM