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

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

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

    andy's blog

    記錄我的所做所思

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      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:應用系統(tǒng)中,訂閱信息:
    ???????? 如有多個用戶訂閱的跟蹤某記錄更新信息。

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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品国产美女久久久| 日本高清在线免费| 全黄A免费一级毛片| 国产精品成人免费一区二区 | 国产一区视频在线免费观看| 免费大黄网站在线观看| 国产亚洲欧美日韩亚洲中文色| 在线不卡免费视频| 亚洲精品国产字幕久久不卡| 国内精品免费在线观看| 亚洲av无码一区二区三区网站| 日本在线免费观看| 亚洲欧洲在线播放| 成人免费一级毛片在线播放视频| 亚洲中文字幕成人在线| 亚洲人成亚洲精品| 麻豆69堂免费视频| 亚洲国产精品综合久久网络| CAOPORN国产精品免费视频| 久久亚洲AV午夜福利精品一区 | 国产精品免费一区二区三区四区| 亚洲欧洲国产精品你懂的| 最近免费中文字幕大全高清大全1| 亚洲理论在线观看| 日本一道一区二区免费看 | 亚洲六月丁香六月婷婷色伊人| 日本中文字幕免费看| 亚洲色无码专区在线观看| 2020因为爱你带字幕免费观看全集 | 日韩亚洲国产高清免费视频| 亚洲gay片在线gv网站| 精品国产人成亚洲区| 99re6在线视频精品免费下载| 亚洲精品国精品久久99热| 成人免费乱码大片A毛片| 亚洲精品视频免费看| 国产网站免费观看| 久久久久国产精品免费免费不卡| 中文字幕亚洲乱码熟女一区二区 | 亚洲av片劲爆在线观看| 免费看香港一级毛片|