<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)  編輯  收藏 所屬分類: 設計模式

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


    網站導航:
     
    主站蜘蛛池模板: 国产精品亚洲а∨天堂2021| 亚洲最大的黄色网| 一级毛片一级毛片免费毛片 | 无码亚洲成a人在线观看| 免费大片黄在线观看yw| 亚洲高清资源在线观看| 91精品国产免费久久国语麻豆| 91久久亚洲国产成人精品性色| 一区二区免费视频| 亚洲综合色一区二区三区小说| 91av免费观看| 国产91在线|亚洲| 国产精品四虎在线观看免费 | h片在线观看免费| 亚洲亚洲人成综合网络| 99久久免费看国产精品| 亚洲精品自产拍在线观看动漫| 亚洲一区二区三区免费视频| 亚洲国产精品久久人人爱| 亚洲天堂免费在线| 亚洲国产精品成人综合色在线| 四虎影视免费永久在线观看| 一区二区三区在线免费观看视频 | 久久久久久亚洲精品中文字幕| 香港a毛片免费观看| 亚洲国产综合自在线另类| 成年男女免费视频网站| 福利片免费一区二区三区| 国产亚洲精品观看91在线| 亚洲w码欧洲s码免费| 亚洲成AV人影片在线观看| 相泽亚洲一区中文字幕| 131美女爱做免费毛片| 亚洲欧洲精品成人久久曰| 亚洲一区二区三区在线视频| 99re免费在线视频| 亚洲乱码无人区卡1卡2卡3| 亚洲色偷偷偷鲁综合| 成人免费a级毛片| 中文字幕在线免费播放| 亚洲午夜精品在线|