<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dev@Free

    zJun's Tech Weblog

    [GoF23] Java中的觀察者模式(Observer)

    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(
    " 天氣炎熱 "
    );
    ????}

    }

    [運行結果]

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

    posted on 2006-05-18 10:54 zJun's帛羅閣 閱讀(1938) 評論(2)  編輯  收藏 所屬分類: 設計模式

    評論

    # re: [GoF23] Java中的觀察者模式(Observer) 2006-05-19 10:30 Harryson

    你可真又靈感哈,
    真會思考,居然把這次的自然現象也用java來實現了.呵呵,  回復  更多評論   

    # re: [GoF23] Java中的觀察者模式(Observer) 2006-05-22 22:23 zJun

    @Harryson
    呵呵,前幾天到處都在討論這個“珍珠”,所以順手就寫下來了。  回復  更多評論   

    導航

    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    統計

    常用鏈接

    留言簿(15)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品无码素人福利免费| 4hu四虎最新免费地址| 亚洲一区二区视频在线观看 | 免费无码又爽又刺激高潮| 亚洲国产美国国产综合一区二区| 久热免费在线视频| 亚洲毛片在线观看| 最近2019年免费中文字幕高清 | 亚洲精品V欧洲精品V日韩精品| 中文字幕的电影免费网站| 国产亚洲婷婷香蕉久久精品| 两个人看的www免费视频中文| 亚洲大尺度无码专区尤物| 久久国产乱子伦精品免费看| 亚洲精品在线播放视频| 在线a级毛片免费视频| 精品韩国亚洲av无码不卡区| 亚洲成av人片在线观看天堂无码 | 亚洲啪啪免费视频| 亚洲s色大片在线观看| 91精品导航在线网址免费| 色在线亚洲视频www| 四虎国产成人永久精品免费| 亚洲精品高清国产麻豆专区| 青青草国产免费久久久下载| 无码的免费不卡毛片视频| 亚洲AV无码成人专区片在线观看 | 100000免费啪啪18免进| 亚洲狠狠婷婷综合久久蜜芽| 亚洲国产精品无码久久久久久曰| 国产一级婬片A视频免费观看| 亚洲最大免费视频网| 免费国产一级特黄久久| 久99久精品免费视频热77| 亚洲中文字幕乱码熟女在线| 亚洲AV伊人久久青青草原 | 日韩在线免费播放| 3344在线看片免费| 亚洲熟妇成人精品一区| 亚洲精品~无码抽插| 欧美最猛性xxxxx免费|