Java中的觀察者模式(Observer)

來源:互聯網
上載者:User
Java作為一種物件導向的開發語言,對實現設計模式提供了良好的支援,並且提供了許多預設的實現,比如:通過Java中的Observable類和Observer介面可以方便的實現觀察者模式。

下面我們就用一個實際的例子來說明:日常生活中說起觀察者,最常見的例子可能就是天氣預報,在這裡我們的觀察對象是地球,而我們是通過發射氣象衛星這個觀察者來檢測地球氣象變化的。

所以這個例子中涉及三個對象:
地球  (Earth):                                          被觀察對象
氣象衛星(Satellite):                        觀察者
氣象局(WeatherService):        用戶端調用

被觀察對象:地球  (Earth)

 import    java.util.Observable;

 /**  */  /**  
 *  被觀察對象:地球
 *  
 *    @author    zjun
 *    @version    1.0  create  on  2006-5-18  9:42:45
   */  
   public      class    Earth    extends    Observable      {
         private    String  weather    =      "  晴朗  "  ;

         /**  */  /**  
         *    @return    Returns  the  weather.
           */  
           public    String  getWeather()      {
                 return    weather;
       }  
 
           /**  */  /**  
         *    @param    weather
         *                        The  weather  to  set.
           */  
           public      void    setWeather(String  weather)      {
                 this  .weather    =    weather;
                 //    設定變化點  
                 setChanged();
               notifyObservers(weather);
       }  
}  
[注意]  在需檢測的對象前需要設定變化點setChanged()和通知觀察者notifyObservers(),這兩個函數是由Observable類實現的,封裝了觀察者模式實現的細節。

觀察者:氣象衛星(Satellite)  

 import    java.util.Observable;
 import    java.util.Observer;

 /**  */  /**  
 *  觀察對象:氣象衛星
 *  
 *    @author    zjun
 *    @version    1.0  create  on  2006-5-18  9:46:30
   */  
   public      class    Satellite    implements    Observer      {
         private    String  weather;

         public      void    update(Observable  obj,  Object  arg)      {
               weather    =    (String)  arg;
                 //    捕獲天氣變化情況,反饋給檢測者  
                 System.out.println(  "  近期天氣變化:  "      +    weather);
       }  
}  
用戶端調用:氣象局(WeatherService)  

   /**  */  /**  
 *  用戶端調用:天氣預報
 *  
 *    @author    zjun
 *    @version    1.0  create  on  2006-5-18  9:57:19
   */  
   public      class    WeatherService      {

         /**  */  /**  
         *    @param    args
           */  
           public      static      void    main(String[]  args)      {
               Earth  earth    =      new    Earth();
               
               Satellite  satellite    =      new    Satellite();
                 //    發射氣象衛星  
                 earth.addObserver(satellite);

               System.out.println(  "  天氣預報:  "  );
               System.out.println(  "  ------------  "  );
               earth.setWeather(  "  颱風‘珍珠’逼近  "  );
               earth.setWeather(  "  大到暴雨  "  );
               earth.setWeather(  "  天氣炎熱  "  );
       }  
}  
 
[運行結果]  

 天氣預報:
------------
近期天氣變化:颱風‘珍珠’逼近
近期天氣變化:大到暴雨
近期天氣變化:天氣炎熱

註:以上內容來自網路,本人不承擔連帶責任
本文轉自:http://www.javatx.cn/clubPage.jsp?ccStyle=0&tID=632&ccID=14

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.