java中觀察者模式Observable和Observer

來源:互聯網
上載者:User

標籤:sys   name   system   reader   image   strong   err   span   this   

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     @Override17     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

 

java中觀察者模式Observable和Observer

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.