隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155796
          • 排名 - 390

          最新評論

          [關鍵字]:java,design pattern,設計模式,《Java與模式》學習,閻宏,Ph.D,Factory,觀察者模式,observer,event,java自定義事件,java事件機制,事件模型,事件監聽,訂閱發布,事件消息
          [環境]:StarUML5.0 + JDK6
          [作者]:天堂露珠 (wintys@gmail.com) http://www.aygfsteel.com/wintys/

          [正文]:

          Overview of observer     ObserverTest.java:

          package pattern.observer;
          import java.util.Observer;
          import java.util.Observable;

          /**
          * 觀察者(Observer)模式:
          * 使用Java類庫支持的觀察者模式
          * java.util.Observer
          * java.util.Observable

          運行結果:
          Prievious:,Changed:abc
          Prievious:abc,Changed:abcd
          Prievious:abcd,Changed:f

          * @version 2009-5-6
          * @author Winty(wintys@gmail.com)
          */
          public class ObserverTest{
              public static void main(String[] args){
                  Watched watched = new Watched();
                  Watcher watcher = new Watcher();
                  watched.addObserver(watcher);

                  watched.changeData("abc");
                  watched.changeData("abcd");
                  watched.changeData("abcd");
                  watched.changeData("f");
                  watched.changeData(null);
                  watched.changeData(null);
              }
          }

          /**
          *具體被觀察者,Observable是抽象被觀察者
          */
          class Watched extends Observable{
              private String data;
              public Watched(){
                  data = "";
              }

              public String retrieveData(){
                  return data;
              }

              public void changeData(String data){
                  if(data!=null && !this.data.equals(data)){
                      String dt = this.data;//記錄變化前的數據
                      this.data = data;

                      setChanged();
                      notifyObservers(dt);
                  }       
              }
          }

          /**
          *具體觀察者,抽象觀察者為Observer
          */
          class Watcher implements Observer{
              @Override
              public void update(Observable o , Object arg){
                  Watched wathed = (Watched)o;
                  String previousData = (String)arg;

                  System.out.print("Prievious:" + previousData + ",");
                  System.out.println("Changed:" + wathed.retrieveData());
              }

          }

           

          [附件]:

          pattern_Observable.zip :
          ObserverTest.java、Observer.java、Observable.java

          原創作品,轉載請注明出處。
          作者:Winty (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys
          posted on 2009-10-11 19:56 天堂露珠 閱讀(1734) 評論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 礼泉县| 惠州市| 兰坪| 峨山| 巴林左旗| 阿拉善盟| 东港市| 宣化县| 广宗县| 潼南县| 咸阳市| 衡阳县| 林甸县| 新巴尔虎左旗| 睢宁县| 曲沃县| 革吉县| 襄樊市| 大安市| 潞西市| 新宾| 高密市| 兴城市| 青海省| 萨迦县| 新乐市| 双牌县| 克拉玛依市| 莒南县| 乌苏市| 鹤岗市| 枝江市| 屏边| 莫力| 子长县| 都匀市| 昌都县| 中牟县| 包头市| 石柱| 嘉黎县|