隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

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

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156402
          • 排名 - 390

          最新評(píng)論

          [關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》學(xué)習(xí),閻宏,Ph.D,Factory,觀察者模式,observer,event,java自定義事件,java事件機(jī)制,事件模型,事件監(jiān)聽(tīng),訂閱發(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類庫(kù)支持的觀察者模式
          * java.util.Observer
          * java.util.Observable

          運(yùn)行結(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)載請(qǐng)注明出處。
          作者:Winty (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys
          posted on 2009-10-11 19:56 天堂露珠 閱讀(1738) 評(píng)論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 深圳市| 孝昌县| 晴隆县| 固镇县| 张家口市| 靖州| 乐清市| 务川| 健康| 长春市| 遂昌县| 赣州市| 卢氏县| 保康县| 昭平县| 鹤山市| 珠海市| 龙山县| 平南县| 双峰县| 平和县| 张家港市| 扎赉特旗| 察隅县| 泰安市| 清原| 西充县| 抚远县| 雅江县| 柘荣县| 山阳县| 庐江县| 江安县| 宁海县| 上思县| 南宫市| 朝阳市| 于都县| 潢川县| 武定县| 千阳县|