隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

          常用設(shè)置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156400
          • 排名 - 390

          最新評論

          [關(guān)鍵字]:java,design pattern,設(shè)計模式,《Java與模式》學(xué)習(xí),閻宏,Ph.D,Factory,觀察者模式,observer,event,java自定義事件,java事件機制,事件模型,事件監(jiān)聽,訂閱發(fā)布,事件消息
          [環(huán)境]: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

          運行結(jié)果:
          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;//記錄變化前的數(shù)據(jù)
                      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

          原創(chuàng)作品,轉(zhuǎn)載請注明出處。
          作者:Winty (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys
          posted on 2009-10-11 19:56 天堂露珠 閱讀(1738) 評論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 福贡县| 油尖旺区| 自贡市| 无棣县| 宁海县| 区。| 大田县| 洪雅县| 通化市| 儋州市| 宜春市| 沾化县| 文水县| 芜湖县| 利川市| 金溪县| 上饶县| 乌恰县| 陵川县| 新乐市| 斗六市| 平安县| 河北区| 陕西省| 来宾市| 常州市| 广平县| 祥云县| 海宁市| 柯坪县| 沅陵县| 淳安县| 腾冲县| 兰西县| 广汉市| 子长县| 高清| 克什克腾旗| 五台县| 通化市| 淮南市|