<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 閱讀(84) 評論(0)  編輯  收藏 所屬分類: 設計模式

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲免费视频播放| 亚洲色大成网站www| 婷婷亚洲久悠悠色悠在线播放| 久久精品a亚洲国产v高清不卡| 亚洲乱色熟女一区二区三区蜜臀| 一级黄色免费大片| 国产91色综合久久免费分享| 亚洲国产中文字幕在线观看| 亚洲成年人电影网站| 一级毛片a免费播放王色| 国产一区二区免费在线| 亚洲av无码一区二区三区观看| 三上悠亚电影全集免费| 在线观看永久免费视频网站| 亚洲国产精品成人久久久| 亚洲最大免费视频网| 亚洲av激情无码专区在线播放| 久久久久国产免费| 亚洲人成中文字幕在线观看| 黄色免费在线观看网址| 无码日韩人妻av一区免费| 亚洲天堂视频在线观看| 亚洲一级片免费看| 亚洲欧洲一区二区三区| 久久免费国产视频| 亚洲国产成人精品无码区在线观看| 人碰人碰人成人免费视频| 无码专区一va亚洲v专区在线| 亚洲狠狠成人综合网| 国产无人区码卡二卡三卡免费 | 亚洲av永久无码天堂网| 性生大片视频免费观看一级| 亚洲无人区午夜福利码高清完整版| 一级毛片免费观看不卡的| 国产精品久久久久久亚洲影视| 国内免费高清在线观看| 在线aⅴ亚洲中文字幕| 亚洲人成网站观看在线播放| 亚洲精品色播一区二区| 亚洲人成图片小说网站| 成年男女免费视频网站|