夢(mèng)幻之旅

          DEBUG - 天道酬勤

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks
          <2011年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          公告

          本博客中未注原創(chuàng)的文章均為轉(zhuǎn)載,對(duì)轉(zhuǎn)載內(nèi)容可能做了些修改和增加圖片注釋,如果侵犯了您的版權(quán),或沒(méi)有注明原作者,請(qǐng)諒解

          常用鏈接

          留言簿(21)

          隨筆分類(644)

          隨筆檔案(669)

          文章檔案(6)

          最新隨筆

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          用一個(gè)中介對(duì)象來(lái)封裝一系統(tǒng)的對(duì)象交互。中介者使各對(duì)象不需要顯示地相互引用,從而使其耦合松散,而可以獨(dú)立改變他們之間的效死.
          組成部份:
          1.中介者
          2.具體中介者
          3.同事
          4.具體同事
          組成部份之間的關(guān)系:

          例子:
          1.人
          package simpleMediator;

          /**
           * <ul>
           * <li>Title:[Person]</li>
           * <li>Description: [人(抽象同事)]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-3]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public abstract class Person
          {
              
          /** 姓名 */
              
          private String name;
              
              
          /** 條件 */
              
          private int condition;
              
              
          /** 中介者(不管男孩還是女孩,都需要知道中介者,通過(guò)中介者去找對(duì)象) */
              
          private Mediator mediator;
              
              
          /**
               * <ul>
               * <li>Description:[構(gòu)造方法]</li>
               * <ul>
               * 
               * 
          @param name
               * 
          @param condition
               * 
          @param mediator
               
          */

              
          public Person(String name, int condition, Mediator mediator)
              
          {
                  
          this.name = name;
                  
          this.condition = condition;
                  
          this.mediator = mediator;
              }

              
              
          /**
               * <ul>
               * <li>Description:[找對(duì)象]</li>
               * <li>Created by [Huyvanpull] [2011-8-3]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * 
          @param person
               * 
          @return
               
          */

              
          public abstract boolean findPartner(Person person);
              
              
          public String getName()
              
          {
                  
          return name;
              }

              
              
          public void setName(String name)
              
          {
                  
          this.name = name;
              }

              
              
          public int getCondition()
              
          {
                  
          return condition;
              }

              
              
          public void setCondition(int condition)
              
          {
                  
          this.condition = condition;
              }

              
              
          public Mediator getMediator()
              
          {
                  
          return mediator;
              }

              
              
          public void setMediator(Mediator mediator)
              
          {
                  
          this.mediator = mediator;
              }

          }


          2.男孩
          package simpleMediator;

          public class Boy extends Person
          {   
              
          /**
               * <ul>
               * <li>Description:[構(gòu)造方法]</li>
               * <ul>
               * 
               * 
          @param name
               * 
          @param condition
               * 
          @param mediator
               
          */

              
          public Boy(String name, int condition, Mediator mediator)
              
          {
                  
          super(name, condition, mediator);
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see simpleMediator.Person#findPartner(simpleMediator.Person)
               
          */

              
          public boolean findPartner(Person person)
              
          {
                  System.out.println(
          "boy try to find girl.");
                  
          this.getMediator().findPartner(person);
                  
          return false;
              }

              
          }


          3.女孩
          package simpleMediator;

          public class Girl extends Person
          {
              
              
          /**
               * <ul>
               * <li>Description:[構(gòu)造方法]</li>
               * <ul>
               * 
               * 
          @param name
               * 
          @param condition
               * 
          @param mediator
               
          */

              
          public Girl(String name, int condition, Mediator mediator)
              
          {
                  
          super(name, condition, mediator);
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see simpleMediator.Person#findPartner(simpleMediator.Person)
               
          */

              
          public boolean findPartner(Person person)
              
          {
                  System.out.println(
          "girl try to find boy.");
                  
          this.getMediator().findPartner(person);
                  
          return false;
              }

              
          }


          4.婚介
          package simpleMediator;

          /**
           * <ul>
           * <li>Title:[Mediator]</li>
           * <li>Description: [婚姻登記](méi)</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-3]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public interface Mediator
          {
              
              
          /**
               * <ul>
               * <li>Description:[男孩登記](méi)</li>
               * <li>Created by [Huyvanpull] [2011-8-3]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * 
          @param boy
               
          */

              
          public void registBoy(Boy boy);
              
              
          /**
               * <ul>
               * <li>Description:[女孩登記](méi)</li>
               * <li>Created by [Huyvanpull] [2011-8-3]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * 
          @param girl
               
          */

              
          public void registGirl(Girl girl);
              
              
          /**
               * <ul>
               * <li>Description:[介紹對(duì)象]</li>
               * <li>Created by [Huyvanpull] [2011-8-3]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * 
          @param person
               * 
          @return
               
          */

              
          public boolean findPartner(Person person);
          }


          5.具體婚介
          package simpleMediator;

          /**
           * <ul>
           * <li>Title:[RedSunMediator]</li>
           * <li>Description: [紅日婚介所]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-3]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public class RedSunMediator implements Mediator
          {
              
          /** 男孩 */
              
          private Boy boy;
              
              
          /** 女孩 */
              
          private Girl girl;
              
              
          /* (non-Javadoc)
               * @see simpleMediator.Mediator#registBoy(simpleMediator.Boy)
               
          */

              
          public void registBoy(Boy boy)
              
          {
                  
          this.boy = boy;
              }

              
              
          /* (non-Javadoc)
               * @see simpleMediator.Mediator#registGirl(simpleMediator.Girl)
               
          */

              
          public void registGirl(Girl girl)
              
          {
                  
          this.girl = girl;
              }

              
              
          // 根據(jù)各自的條件匹配
              public boolean findPartner(Person person)
              
          {
                  
          if (person instanceof Boy)
                  
          {
                      
          this.boy = (Boy) person;
                  }

                  
          else
                  
          {
                      
          this.girl = (Girl) person;
                  }

                  
                  
          boolean success = this.boy.getCondition() == this.girl.getCondition();
                  
                  StringBuffer info 
          = new StringBuffer();
                  info.append(
          this.boy.getName());
                  info.append(
          " vs ");
                  info.append(
          this.girl.getName());
                  info.append(
          " is partner: " );
                  info.append(success);
                  
                  System.out.println(info);
                  
                  
          return success;
              }

          }


          6.測(cè)試
          package simpleMediator;

          public class Test
          {
              
          public static void main(String[] args)
              
          {
                  
          // 紅日婚介所開張
                  Mediator mediator = new RedSunMediator();
                  
                  
          // 一個(gè)名為小趙的男孩,條件為2500
                  Boy xiaoZhao = new Boy("小趙"2500, mediator);
                  mediator.registBoy(xiaoZhao);
                  
                  
          // 一個(gè)名為小錢的女孩,條件為為2500
                  Girl xiaoQian = new Girl("小錢"2500, mediator);
                  mediator.registGirl(xiaoQian);
                  
                  
          // 如果條件符合,則partner成立
                  xiaoZhao.findPartner(xiaoQian);
                  
                  
          // 一個(gè)名為lanlan的女孩,條件為90
                  Girl xiaosun = new Girl("小孫"5000, mediator);
                  mediator.registGirl(xiaosun);
                  xiaosun.findPartner(xiaoZhao);
              }

          }

          總結(jié)
               中介者模式很容易在系統(tǒng)中應(yīng)用,也很容易在系統(tǒng)中誤用。當(dāng)系統(tǒng)出現(xiàn)了“多對(duì)多”交互復(fù)雜的對(duì)象群,不要急于使用中介者模式,而要先反思你的系統(tǒng)在設(shè)計(jì)上是不是合理。
          posted on 2011-08-03 17:04 HUIKK 閱讀(295) 評(píng)論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 阳泉市| 灌阳县| 客服| 西畴县| 广州市| 龙井市| 广元市| 盘锦市| 沙洋县| 望奎县| 蓬莱市| 南靖县| 丰城市| 通榆县| 盐山县| 高雄县| 东丽区| 图木舒克市| 额济纳旗| 高碑店市| 汶川县| 五原县| 顺平县| 砚山县| 泰宁县| 贵州省| 湖北省| 鄂托克旗| 雷波县| 乌兰县| 东乌珠穆沁旗| 陇南市| 文成县| 通城县| 耿马| 临朐县| 石门县| 广元市| 贺州市| 方城县| 新安县|