<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)護(hù)人(觀察者),當(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負(fù)責(zé)將自己注冊到Subject上。

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

    Copyright © flustar

    主站蜘蛛池模板: 国产成人免费片在线视频观看| 黄色一级毛片免费| 99热这里只有精品免费播放| 丁香五月亚洲综合深深爱| 四虎影视永久在线精品免费| 亚洲国产婷婷香蕉久久久久久| 国产成人亚洲精品蜜芽影院| 国产jizzjizz视频免费看| 爱情岛论坛免费视频| 中文字幕亚洲图片| 成人片黄网站色大片免费观看APP| 国产亚洲精品久久久久秋霞| 永久免费av无码网站yy| 亚洲一区二区成人| 无码免费午夜福利片在线| 亚洲欧美日韩久久精品| 免费一级国产生活片| jizz中国免费| 97亚洲熟妇自偷自拍另类图片| 69pao强力打造免费高清| 亚洲黄色激情视频| 国产大片51精品免费观看| 亚洲黄片手机免费观看| 久久亚洲国产成人精品性色| 国产99视频精品免费观看7| 亚洲av纯肉无码精品动漫| 在线A亚洲老鸭窝天堂| 13一14周岁毛片免费| 国产亚洲精aa在线看| 亚洲免费日韩无码系列| 久久香蕉国产线看免费| 中文字幕亚洲码在线| 久久精品亚洲福利| 麻豆国产精品免费视频| 亚洲avav天堂av在线网毛片| 国产精品亚洲A∨天堂不卡| 无码国产精品一区二区免费| 性生大片视频免费观看一级| 亚洲专区先锋影音| 免费日韩在线视频| 国产成人精品久久免费动漫|