夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          <2011年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          公告

          本博客中未注原創的文章均為轉載,對轉載內容可能做了些修改和增加圖片注釋,如果侵犯了您的版權,或沒有注明原作者,請諒解

          常用鏈接

          留言簿(21)

          隨筆分類(644)

          隨筆檔案(669)

          文章檔案(6)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          用一個中介對象來封裝一系統的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散,而可以獨立改變他們之間的效死.
          組成部份:
          1.中介者
          2.具體中介者
          3.同事
          4.具體同事
          組成部份之間的關系:

          例子:
          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;
              
              
          /** 中介者(不管男孩還是女孩,都需要知道中介者,通過中介者去找對象) */
              
          private Mediator mediator;
              
              
          /**
               * <ul>
               * <li>Description:[構造方法]</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:[找對象]</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:[構造方法]</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:[構造方法]</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: [婚姻登記]</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:[男孩登記]</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:[女孩登記]</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:[介紹對象]</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;
              }

              
              
          // 根據各自的條件匹配
              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.測試
          package simpleMediator;

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

          }

          總結
               中介者模式很容易在系統中應用,也很容易在系統中誤用。當系統出現了“多對多”交互復雜的對象群,不要急于使用中介者模式,而要先反思你的系統在設計上是不是合理。
          posted on 2011-08-03 17:04 HUIKK 閱讀(287) 評論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 叙永县| 息烽县| 县级市| 隆回县| 吐鲁番市| 阜南县| 潞西市| 三穗县| 云梦县| 开鲁县| 台州市| 开封县| 怀化市| 阳泉市| 甘南县| 保德县| 沁水县| 湘西| 武邑县| 互助| 礼泉县| 武夷山市| 新河县| 昌都县| 曲阜市| 包头市| 札达县| 丰城市| 大兴区| 耒阳市| 土默特右旗| 淮北市| 通江县| 望都县| 双鸭山市| 大英县| 纳雍县| 青龙| 固安县| 谷城县| 电白县|