<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帛羅閣 閱讀(1948) 評論(2)  編輯  收藏 所屬分類: 設計模式

    評論

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

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

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

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


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     

    導航

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

    統計

    常用鏈接

    留言簿(15)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码国产精品一区二区免费I6| 真人无码作爱免费视频| 日韩精品在线免费观看| 亚洲综合另类小说色区| 日本一区二区在线免费观看| 亚洲AV成人精品日韩一区18p| 久久无码av亚洲精品色午夜| 国产一区二区三区在线观看免费| 亚洲AV无码一区二区一二区| 免费亚洲视频在线观看| 成人国产网站v片免费观看| 亚洲一区无码中文字幕| 免费成人在线视频观看| 亚洲国产精品久久久久秋霞影院| 国内精自视频品线六区免费| 亚洲人成自拍网站在线观看| 免费国产高清视频| a毛片在线看片免费| 久久久亚洲欧洲日产国码是AV| 真人做A免费观看| 日韩亚洲人成在线综合| 国产亚洲精午夜久久久久久| 国产精品区免费视频| 亚洲二区在线视频| 四虎精品亚洲一区二区三区| 99在线视频免费观看| 亚洲成人福利在线| 亚洲v国产v天堂a无码久久| 日韩电影免费在线观看中文字幕 | 妻子5免费完整高清电视| 亚洲色大成网站www尤物| 亚洲福利在线播放| 99精品视频在线观看免费播放| 亚洲色欲色欱wwW在线| 国产精品亚洲w码日韩中文| 亚洲免费网站在线观看| 粉色视频在线观看www免费| 亚洲毛片在线观看| 免费看国产一级片| 2021精品国产品免费观看| 日亚毛片免费乱码不卡一区|