首页 |缤纷校园 |心理援助 |英语世界 |公务员 |考研天地 |资格考试 |电脑认证 |免费论文 |实用文档 |求职就业 |论坛 |网络课堂 |留言版
 电脑认证首页     考试专题 考试提醒 计算机等级考试 计算机认证水平考试 IT认证 论坛
 最近更新
· [计算机专题]Java中的观察者模式(Obser…
· [备考指南]GoogleAndroid会使Java领域…
· [备考指南]Eclipse还是开源IDE的领头…
· [软件设计师考试动态]云南:07上半年软件水平考…
· [软件设计师考试动态]贵州:07年上半年软件水平…
· [学习辅导]WindowsCE开发中最常用的概…
· [学习辅导]修改注册表通过Update更新…
· [学习辅导]德国将开发“执法木马”打…
· [计算机专题]毒霸陈睿:08年新增木马数量…
· [计算机专题]SQLServer端口更改后的数据…
 精品课程
· [精品课程推荐]08年投资项目管理师考…
· [精品课程推荐]08年职称日语考试辅导…
· [精品课程推荐]08年环境影响评价师辅…
· [精品课程推荐]08年质量资格考试辅导…
· [精品课程推荐]08年会计职称辅导报精…
· [精品课程推荐]08年建筑师考试辅导京…
· [精品课程推荐]08职称英语考试辅导王…
· [精品课程推荐]08年咨询工程师考试名…
· [精品课程推荐]08年监理工程师考试辅…
· [精品课程推荐]经济师考试网上辅导报…
 考试动态
· [二级考试动态]北京:07年下半年计算机等…
· [二级考试动态]2008年4月全国计算机等级考…
· [二级考试动态]2007年下半年计算机等级考…
· [二级考试动态]天津:2007年下半年全国计…
· [二级考试动态]计算机技术与软件专业技术…
· [二级考试动态]2007年计算机等级考试改期…
· [二级考试动态]河北07计算机考点出故障考…
· [二级考试动态]2007年贵州省计算机补考7月…
· [二级考试动态]了解考试系列:二级C语言的…
· [二级考试动态]了解考试系列:二级VC++语…
 试题下载
· [试题下载]2007年计算机等级考试二级…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]2007年9月二级VB试题答案
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VF模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]VC++中利用/GS开关防止缓冲…
· [试题下载]2007年4月计算机等级考试二…
 学习辅导
· [学习辅导]2007年计算机二级VF编辑
· [学习辅导]2007年C语言辅导:可移植性
· [学习辅导]2007年制作风格独特的按钮
· [学习辅导]2007年VFP中使用Grid控件设…
· [学习辅导]MoreEffectiveC++之考虑变…
· [学习辅导]C++/CLI解析之基于堆栈的对…
· [学习辅导]C++builder的文件读写操作…
· [学习辅导]C++类对象的复制-拷贝构造…
· [学习辅导]C++基本数据类型与输入输出
· [学习辅导]C++程序设计之四书五经
 

Java中的观察者模式(Observer)学习

文章录入:admin    责任编辑:admin   2007-11-27 14:04:52  来源:考试大  点击数:
 

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(  "  天气炎热  "  );
       }  
}  
 
[运行结果]  

 天气预报:
------------
近期天气变化:台风‘珍珠’逼近
近期天气变化:大到暴雨
近期天气变化:天气炎热

  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    关于本站 - 广告服务 - 站内导航 - 网站声明 - 友情链接 - 联系我们
    Copyright©2003-2008 www.dastu.com, All Rights Reserved.

    心语心愿科技(北京)有限责任公司 版权所有

    鄂ICP备05000022号