<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

     《設(shè)計模式》一書對Observer是這樣描述的:
    定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知并自動更新。
    舉個例子,在現(xiàn)實生活中,父母與孩子是最親密的人。父母做為孩子(被觀察者)的監(jiān)護人(觀察者),當(dāng)孩子和別人打架后,一定會告訴他的父母這件事(呵呵,當(dāng)孩子很小時,通常會告訴父母,長大了以后,可能不會,這里的孩子指的是小孩子),當(dāng)孩子獲得獎學(xué)金后,也一定會告訴他的父母。下面我用Observer實現(xiàn)這個程序。代碼如下:
    import java.util.Vector;

    class Children{
     static private Vector<Observer> obs;
     static private String state=null;
     static{
      obs=new Vector<Observer>();
     }
     public static void attach(Observer o){
      obs.addElement(o);
     }
     public static void detach(Observer o){
      obs.removeElement(o);
     }
     public void setState(String str){
      state=str;
     }
     public String getState(){
      return state;
     }
     public void notifyObs(){
      for(Observer o:obs){
       o.update(this); 
      }
     }
    }
    interface Observer{
     public void update(Children child);
    }
    class Parent implements Observer{
     public void update(Children child){
      if(child.getState().equals("fight")){
       System.out.println("Parent,他和別人打架了");
      }else if(child.getState().equals("scholarship")){
       System.out.println("告訴Parent,他得到了獎學(xué)金");
      }
     }
    }
    class Mother implements Observer{
     public void update(Children child){
      if(child.getState().equals("fight")){
       System.out.println("告訴Mother,他和別人打架了");
      }else if(child.getState().equals("scholarship")){
       System.out.println("告訴Mother,他得到了獎學(xué)金");
      }
     }
    }
    public class Client {

     public static void main(String[] args) {
      Children child=new Children();
      Observer parent=new Parent();
      Observer mother=new Mother();
      child.attach(parent);
      child.attach(mother);
      child.setState("fight");
      child.notifyObs();
      child.setState("scholarship");
      child.notifyObs();

     }

    }

    輸出如下:
    告訴Parent,他和別人打架了
    告訴Mother,他和別人打架了
    告訴Parent,他得到了獎學(xué)金
    告訴Mother,他得到了獎學(xué)金
     小結(jié):對于Observer模式,觸發(fā)事件的對象-Subject對象無法預(yù)測可能需要知道該事件的所有對象。為了解決這一問題,我們創(chuàng)建一個Observer接口,要求所有的Observer負責(zé)將自己注冊到Subject上。

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 亚洲电影一区二区| 久久久久无码精品亚洲日韩 | 国产精品亚洲精品久久精品 | 在线看无码的免费网站| 亚洲精品二区国产综合野狼| 成在人线av无码免费高潮水| 中文字幕一精品亚洲无线一区| 成人免费乱码大片A毛片| 亚洲午夜无码片在线观看影院猛| 三级片免费观看久久| 久久国产成人精品国产成人亚洲| 久久国产美女免费观看精品| 国产亚洲精品国产| 日韩电影免费在线观看中文字幕| 色婷婷六月亚洲婷婷丁香| 免费专区丝袜脚调教视频| 亚洲一线产区二线产区区| 成人永久免费高清| 一级毛片免费不卡| 亚洲AV综合色一区二区三区| 99re视频精品全部免费| 亚洲无吗在线视频| 亚洲JIZZJIZZ中国少妇中文| 丰满人妻一区二区三区免费视频| 亚洲avav天堂av在线不卡| 成年女人免费视频播放体验区| WWW国产亚洲精品久久麻豆| 亚洲中文字幕无码一区| 16女性下面无遮挡免费| 亚洲精品无码成人| 久久被窝电影亚洲爽爽爽| 国产精品入口麻豆免费观看| 亚洲风情亚Aⅴ在线发布| 国产自偷亚洲精品页65页| 8x8×在线永久免费视频| 国产精品无码亚洲一区二区三区| 曰韩亚洲av人人夜夜澡人人爽| 黄在线观看www免费看| 猫咪免费观看人成网站在线| 亚洲精品福利视频| 国产大片91精品免费观看男同|