<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設計模式學習之Observer模式

      • 今天繼續學習設計模式。
        學到的兩個模式:觀察者模式,它屬于行為性模式。
      • 觀察者模式:
        定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時, 所有依賴于它的對象都得到通知并被自動更新。
      • 適用性:
        1. 當一個抽象模型有兩個方面, 其中一個方面依賴于另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和復用。
        2. 當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變。
        3. 當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之, 你不希望這些對象是緊密耦合的。
      • 我的理解是:
        觀察者模式首先定義了一個被觀察者,然后讓很多的觀察者訂閱被觀察者,而被觀察者在自己的狀態有了更新時向所有的觀察者“推送”自己的狀態信息,從而使所有的觀察者都得到通知。其實這個模式讓人很容易想到當前一種最為潮流的互聯網應用:微博。就拿微博為例,每一個人都可以是觀察者與被觀察者兩種身份,當你關注別人的時候,比如你的一個朋友小羅,你就成為了小羅的粉絲,就相當于此時小羅為被觀察者,而你自己是觀察者身份,你訂閱了被觀察者,使被觀察者在自己狀態發生改變時會及時通知你。比如小羅今天去旅游,他將照片發到了微博上,這樣你就能及時的看到他的動態了。而且不只是你,他所有的粉絲都能看到他的動態了。而當你的另外一個朋友,比如小楊關注了你,這樣你就成為了被觀察者,而小楊就是觀察者,當你在微博上的個人中心上發狀態時,小楊就能實時看到你的狀態了,或者會對你的狀態進行評論。所以,Observer模式很容易理解。
        那么,如何來實現它呢?其實很簡單,主要是在被觀察者上面做文章,被觀察者類需要引入三個方法:AddObserver, DeleteObserver, Notify。
        前兩個方法用來動態的增加和刪除觀察者,后面一個方法用來通知所有的觀察者。
      • 代碼:
      •   1 //被觀察者接口
          2 public interface IObservarable
          3 {
          4   public void addObserver(Observer obs);
          5   public void deleteObserver(Observer obs);
          6   public void notify();
          7 }
          8 //被觀察者類
          9 public class Observarable implements IObserverable
         10 {
         11   protected ArrayList arrObservers;//存放所有的觀察者
         12   protected ArrayList arrStates;//存放自己的狀態以便通知所有的觀察者
         13   protected String name;
         14   public Observarable(String name)
         15   {
         16     this.name=name;
         17     this.arrObservers=new ArrayList();
         18   }
         19   public void addObserver(Observer obs)
         20   {
         21     arrObservers.add(obs);
         22   }
         23   public void deleteObserver(Observer obs)
         24   {
         25     int i=this.arrObservers.indexof(obs);
         26     if(i>=0)
         27     {
         28       this.arrObservers.remove(i);
         29     }
         30   }
         31   public void notify()
         32   {
         33     this.arrStates=new ArrayList();
         34     this.arrStates.add(this.name);
         35     for(int i=0; i<this.arrObservers.size(); i++)
         36     {
         37       Observer obs=arrObservers.get(i);
         38       obs.update(this, this.arrStates);
         39     }
         40   }
         41   public string getName()
         42   {
         43     return this.name;
         44   }
         45 }
         46 //更加具體的被觀察者(擁有自己的狀態)
         47 public class Observerable1 extends Observable
         48 {
         49   private State1 state1;
         50   private State2 state2;
         51   public void notify()
         52   {
         53     this.arrStates.add(this.name);
         54     this.arrStates.add(this.state1);
         55     this.arrStates.add(this.state2);
         56     for(int i=0; i<this.arrObservers.size(); i++)
         57     {
         58       Observer obs=arrObservers.get(i);
         59       obs.update(this, arrStates);
         60     }
         61   }
         62   public State1 getState1()
         63   {
         64     return this.state1;
         65   }
         66   public State2 getState2()
         67   {
         68     return this.state2;
         69   }  
         70 }
         71 //觀察者接口
         72 public interface IObserver
         73 {
         74   public void update(Observerable o, Object arg);
         75 }
         76 //觀察者類
         77 public class Observer implements IObserver
         78 {
         79   protected String name;
         80   public Observer(String name)
         81   {
         82     this.name=name;
         83   }
         84   public void update(Observerable o, Object arg)
         85   {
         86     System.out.println("Observer "+this.name+" has been notified!");
         87   }
         88 }
         89 //更加具體的觀察者1(采用拉的方式)
         90 public class Observer1 extends Observer
         91 {
         92   public void update(Observerable o, Object arg)
         93   {
         94     super.update();
         95     System.out.println("I love you!");
         96     System.out.println("I have get the state of "+o.getName());
         97     if(o instanceof Observerable1)
         98     {
         99       System.out.println("state1:"+o.getState1()+", state2:"+o.getState2());
        100     }
        101   }
        102 }
        103 //更加具體的觀察者2(采用推的方式)
        104 public class Observer2 extends Observer
        105 {
        106   public void update(Observerable o, Object arg)
        107   {
        108     super.update();
        109     System.out.println("I love you!");  
        110     if(o instanceof Observerable1)
        111     {
        112       System.out.println("I have get the state of "+arg[0].toString());
        113       System.out.println("state1:"+(State1)arg[1].toString()+", state2:"+(State2)arg[2].toString());
        114     }
        115   }
        116 }
        117 public class Test
        118 {
        119   public static void main(string []argv)
        120   {
        121     Observer1 obs1=new Observer1("xiaoluo");
        122     Observer1 obs2=new Observer2("xiaoyang");
        123     Observerable1 obsb1=new Observerable1("xiaoguo");
        124     obsb1.addObserver(obs1);
        125     obsb1.addObserver(obs2);
        126     obsb1.notify();
        127   }
        128 }

         

      posted @ 2012-07-25 09:22  everdom  閱讀(262)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费国产一级 片内射老| 午夜福利在线观看成人| 欧美最猛黑人xxxx| 在线观看国产成人av片| 四虎国产精品永久在线下载| 国产91小视频在线观看| 国产成人精品无码专区| 日韩高清在线亚洲专区不卡| 久久高清超碰AV热热久久| 丰满无码人妻热妇无码区| 人妻少妇精品视频二区| 亚洲国产精品久久久久4婷婷| 中国亚州女人69内射少妇| 精品嫩模福利一区二区蜜臀| 亚洲综合色婷婷中文字幕| 国产色无码专区在线观看| 亚洲精品成人区在线观看| 久久精品国产亚洲成人av| 无码专区 人妻系列 在线| 亚洲精品动漫免费二区| 久久亚洲人成网站| 秋霞人妻无码中文字幕| 精品一区二区中文字幕| 日韩精品一区二区三区人| 亚洲夂夂婷婷色拍ww47| 国产精品青草久久久久福利99| 精品久久一线二线三线区| 色噜噜亚洲精品中文字幕 | 国产一区二区三区在线观看免费| 国产无遮挡免费视频免费| 狠狠干| 国产又色又爽又黄的在线观看 | 国产精品区一二三四久久| 大陆熟妇丰满多毛xxxⅹ | 青春草在线视频观看| 亚洲国产中文字幕精品| 一本久道中文无码字幕av| 久草热大美女黄色片免费看| 日韩欧美亚洲综合久久| 久女女热精品视频在线观看| 国产在线精品福利91香蕉|