Java中的观察者模式(Observer)

开源中国

开源中国

发表于 2014-09-01 13:13:37
内容来源: 网络

Java作为一种面向对象的开发语言,对实设计模式提供了良好的支持,并且提供了许多默认的实现,比如:通过Java中的Observable类和Observer接口可以方便的实现观察者模式。 中国自学编程网 www.zxbc.cn 下面我们就用一个实际的例子来说明:日常生活中说起观察者,最常见的例子可能就是天气预报,在这里我们的观察对象是地球,而我们是通过发射气象卫星这个观察者来检测地球气象变化的。 所以这个例子中涉及三个对象: 地球  (Earth):                                          被观察对象 气象卫星(Satellite):                        观察者 气象局(WeatherService):        客户端调用 被观察对象:地球  (Earth)  import    java.util.Observable;  /**  */  /**    *  被观察对象:地球  *   [email protected] [email protected]:42:45    */      public      class    Earth    extends    Observable      {          private    String  weather    =      "  晴朗  "  ;          /**  */  /**   [email protected]er.            */              public    String  getWeather()      {                  return    weather;        }                /**  */  /**   [email protected]

[email protected]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;  /**  */  /**    *  观察对象:气象卫星  *   [email protected] [email protected]: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)      /**  */  /**    *  客户端调用:天气预报  *   [email protected] [email protected]:57:19    */      public      class    WeatherService      {          /**  */  /**   [email protected]            */              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(  "  天气炎热  "  );        }   }     [运行结果]    天气预报: ------------ 近期天气变化:台风‘珍珠’逼近 近期天气变化:大到暴雨 近期天气变化:天气炎热

相关帖子
用户评论
开源开发学习小组列表