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

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

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

    andy's blog

    記錄我的所做所思

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      1 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

    一:case context:
    ???? 有一個氣象信息類WeatherData,屬性包括temperature,humidity等,現有兩種顯示WeatherData數據的類WeatherDataDisplay1和WeatherDataDisplay2,當WeatherData的信息改變時,這兩個顯示的類中的數據也改變,維護性方面,可能會有第三種顯示方法,某個顯示類可以申請不根據WeatherData數據實時改變。

    二:
    ????目前現方法, WeatherData中
    ???? public void measurementsChanged()
    ??? {
    ???????? display1.update(getTemperature(),getHumidity());
    ???????? display2.update(getTemperature(),getHumidity());
    ??? }?
    ??? 但方法體中的代碼是可能會變的,有display3的時候,必須得修改代碼。
    三:
    ???? The Observer pattern:defines a one-to-many dependency between objects so that when one object changes state,
    ?????????????????????????????????????????? all of its dependents are notified and updated automatically.

    ??? 此模式類包括:? Subject 接口{registerObserver();removeObserver(),notifyObservers()}, Concrete Subject 類
    ?? ????????????????????????? ? Observer接口{update();},? 多個ConcreteObserver類(display1,display2)。
    ??? public class WeatherData implements Subject
    ??? {
    ???????????private ?List observerList;
    ???????????private float temperature;
    ?????????? private float humidity;

    ????????? public void registerObserver(Observer observer)
    ????????? {
    ???????????????? observerList.add(observer);
    ????????? }
    ????????? public void notifyObjects()
    ??????? {
    ?????????? for (Iterator iter=objectList.iterator();iter.hasNext();)
    ???????? {
    ?????????? Observer observer=(Observer)iter.next();
    ?????????? ?observer.update();
    ????????? }
    ?????? ?}
    ??????? public void changeData(float newTemperature)
    ??????? {
    ??????????????this.temperature=newTemperature;
    ????????????? notifyObjects();
    ??????? }
    ??? }
    ?? //
    ??? public class WeatherReport1 implements Observer{
    ?? ?? private WeatherData weatherData;
    ??? ??public WeatherReport1(WeatherData weatherData)
    ??? ?{
    ????????this.weatherData=weatherData;
    ????????weatherData.registerObject(this);
    ????}
    ????public void update()?
    ????{
    ?????System.out.println("report1--now temperature is:"+weatherData.getTemperature());
    ????}
    ? }
    ?//客戶端測試代碼
    ?public class Tester {
    ?public static void main(String[] args) {
    ??WeatherData weatherData=new WeatherData();
    ??WeatherReport1 weatherReport1=new WeatherReport1(weatherData);
    ??WeatherReport2 weatherReport2=new WeatherReport2(weatherData);
    ??weatherData.changeData(10);
    ??weatherData.removeObject(weatherReport1);
    ??weatherData.changeData(20);
    ?}
    }
    四:java語言build-in支持
    ?????? 在java.util.包中
    ???? Subject接口-->Observable 類(把Observer注冊,notify等方法實現)
    ???? Observer接口-->Observer接口
    ???? 缺點:Observable是一個類你必須繼承它,如果還要繼承其它類就不行了。
    ?????所以如果java內建的類不適合你,就按我們上面寫的自己重頭寫一個。

    五:實例
    ?????1: swing中的事件處理:
    ????????? button.addActionListener(new AL1);
    ????????? button.addActionListerner(new AL2);
    ????????? public void AL1 implements ActionListener{
    ????????????????? public void actionPerformed(Event e)
    ????????????????? {//---
    ????????????????? }
    ???????? }

    ????? 2:應用系統中,訂閱信息:
    ???????? 如有多個用戶訂閱的跟蹤某記錄更新信息。

    posted on 2006-03-27 19:17 zhoumin 閱讀(86) 評論(0)  編輯  收藏 所屬分類: 設計模式

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


    網站導航:
     
    主站蜘蛛池模板: eeuss影院www天堂免费| 亚洲AV天天做在线观看| 一个人免费观看在线视频www| 久久久高清日本道免费观看| 国产亚洲美女精品久久久久| 一个人看的www在线免费视频| 99热在线免费观看| 午夜成人免费视频| 色窝窝免费一区二区三区| 美女被免费视频网站a国产| 亚洲色精品三区二区一区| 青青免费在线视频| 99爱视频99爱在线观看免费| 久久亚洲AV成人出白浆无码国产| 亚洲色偷偷色噜噜狠狠99网| 日韩中文字幕在线免费观看| 亚洲国产精品一区二区久久| 免费播放国产性色生活片| 18禁免费无码无遮挡不卡网站 | 人人揉揉香蕉大免费不卡| 日韩亚洲欧洲在线com91tv| 久久夜色精品国产噜噜亚洲a| 9久久免费国产精品特黄| 啦啦啦中文在线观看电视剧免费版| 亚洲国产成a人v在线观看| 久久久受www免费人成| 国产成人亚洲综合无码精品| 少妇人妻偷人精品免费视频| 中文字幕精品三区无码亚洲| av无码东京热亚洲男人的天堂| 亚洲视频在线观看免费| 最近最好的中文字幕2019免费 | 久久不见久久见免费视频7| 亚洲一区二区三区在线视频 | 亚洲gay片在线gv网站| 97免费人妻在线视频| 亚洲国产无线乱码在线观看| 成人永久福利免费观看| 免费一级毛片无毒不卡| 亚洲熟妇中文字幕五十中出| 黑人粗长大战亚洲女2021国产精品成人免费视频 |