乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計(jì)模式-觀察者模式的JDK實(shí)現(xiàn)

       jl_oracle 2012-01-12

      設(shè)計(jì)模式-觀察者模式的JDK實(shí)現(xiàn)

      關(guān)鍵字: 設(shè)計(jì)模式
      今天在翻查JAVA API的時(shí)候發(fā)現(xiàn)了特別的類java.util.Observable和接口
      java.util.Observer,細(xì)看發(fā)現(xiàn)原來(lái)是java類庫(kù)實(shí)現(xiàn)觀察著(Observer)模式的類和接口。

      觀察者模式定義:
      觀察者(Observer)模式又名發(fā)布-訂閱(Publish/Subscribe)模式。GOF給觀察者模式如下定義:定義對(duì)象Observer間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。

      Observable和Observer的說(shuō)明:
      繼承于Observable的子類表示被觀察的對(duì)象,實(shí)現(xiàn)了接口Observer的類表示觀察者.在下面的例子中繼承于Observable的子類 NewsDispatcher(新聞派發(fā)器)表示被觀察的對(duì)象,在有新的新聞的時(shí)候會(huì)把新聞內(nèi)容派發(fā)給所有的訂閱者(Reader),Reader是實(shí)現(xiàn)了Observer接口的類表示讀者。

      Observable的簡(jiǎn)單功能介紹:
      addObserver(Observer o)  添加觀察著
      clearChanged() 清除變化,則把“變化標(biāo)志”設(shè)為false
      countObservers() 統(tǒng)計(jì)觀察著數(shù)量
      deleteObserver(Observer o) 刪除觀察者
      deleteObservers() 刪除所有的觀察者
      hasChanged() 測(cè)試是否有變化(則返回“變化標(biāo)志”)
      notifyObservers() 如果hasChanged()=ture,通知所有的觀察著(則調(diào)用Observer.update()方法)
      notifyObservers(Object arg) 如果hasChanged()=ture,通知所有的觀察著(則調(diào)用Observer.update()方法),并把參數(shù)arg傳過(guò)去
      setChanged() 設(shè)置變化,則把“變化標(biāo)志”設(shè)為true

      Observable的簡(jiǎn)單功能介紹
      update(Observable o, Object arg) Observable唯一的方法,在被通知時(shí)被Observable調(diào)用

      例子代碼:
      Java代碼
      1. package com.pasu.observer;   
      2.   
      3. import java.util.Observable;   
      4.   
      5. public class NewsDispatcher extends Observable   
      6. {   
      7.       
      8.     public void addNews(String news)   
      9.     {   
      10.         this.setChanged();   
      11.         this.notifyObservers(news);   
      12.     }   
      13.  
      package com.pasu.observer;
      
      import java.util.Observable;
      
      public class NewsDispatcher extends Observable
      {
              
              public void addNews(String news)
              {
                      this.setChanged();
                      this.notifyObservers(news);
              }
      }
      


      Java代碼
      1. package com.pasu.observer;   
      2.   
      3. import java.util.Observable;   
      4. import java.util.Observer;   
      5.   
      6. public class Reader implements Observer   
      7. {   
      8.     private String name;   
      9.        
      10.     public Reader(String name)   
      11.     {   
      12.         this.name name;   
      13.     }   
      14.        
      15.     @Override  
      16.     public void update(Observable o, Object arg)   
      17.     {   
      18.         String news (String)arg;   
      19.         System.out.println(name " news);   
      20.     }   
      21.   
      22.        
      23.  
      package com.pasu.observer;
      
      import java.util.Observable;
      import java.util.Observer;
      
      public class Reader implements Observer
      {
              private String name;
              
              public Reader(String name)
              {
                      this.name = name;
              }
              
              @Override
              public void update(Observable o, Object arg)
              {
                      String news = (String)arg;
                      System.out.println(name + " : " + news);
              }
      
              
      }
      


      Java代碼
      1. package com.pasu.observer;   
      2.   
      3. public class Test   
      4. {   
      5.     public static void main(String[] args)   
      6.     {   
      7.         //體育新聞派發(fā)器   
      8.         NewsDispatcher sportNewsDispatcher new NewsDispatcher();   
      9.         //it新聞派發(fā)器   
      10.         NewsDispatcher itNewsDispatcher new NewsDispatcher();   
      11.         //觀察者r1,r2,r3   
      12.         Reader r1 new Reader("r1");   
      13.         Reader r2 new Reader("r2");   
      14.         Reader r3 new Reader("r3");   
      15.         //添加觀察者   
      16.         sportNewsDispatcher.addObserver(r1);   
      17.         sportNewsDispatcher.addObserver(r2);   
      18.         itNewsDispatcher.addObserver(r3);   
      19.         //當(dāng)有新的新聞的時(shí)候,通知觀察者   
      20.         sportNewsDispatcher.addNews("中國(guó)隊(duì)突破了歷史獲得了世界杯冠軍!");   
      21.         itNewsDispatcher.addNews("ibm 收購(gòu) sun公司,java開(kāi)始收費(fèi)!");    
      22.     }   
      23.  
      package com.pasu.observer;
      
      public class Test
      {
              public static void main(String[] args)
              {
                      //體育新聞派發(fā)器
                      NewsDispatcher sportNewsDispatcher = new NewsDispatcher();
                      //it新聞派發(fā)器
                      NewsDispatcher itNewsDispatcher = new NewsDispatcher();
                      //觀察者r1,r2,r3
                      Reader r1 = new Reader("r1");
                      Reader r2 = new Reader("r2");
                      Reader r3 = new Reader("r3");
                      //添加觀察者
                      sportNewsDispatcher.addObserver(r1);
                      sportNewsDispatcher.addObserver(r2);
                      itNewsDispatcher.addObserver(r3);
                      //當(dāng)有新的新聞的時(shí)候,通知觀察者
                      sportNewsDispatcher.addNews("中國(guó)隊(duì)突破了歷史獲得了世界杯冠軍!");
                      itNewsDispatcher.addNews("ibm 收購(gòu) sun公司,java開(kāi)始收費(fèi)!");     
              }
      }
      


      Test類運(yùn)行輸出的結(jié)果
      Java代碼
      1. r2 中國(guó)隊(duì)突破了歷史,獲得了世界杯冠軍!   
      2. r1 中國(guó)隊(duì)突破了歷史,獲得了世界杯冠軍!   
      3. r3 ibm 收購(gòu) sun公司,java開(kāi)始收費(fèi)!  

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多