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

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

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

    人在江湖

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    一、 模式定義:
    用一個中介者對象來封裝一系列的對象交互。中介者使各對象不需要顯式的相互引用,從而使其耦合松散,而且可以獨立的改變他們之間的交互。
    二、 結構圖
    (略)
    1) 抽象中介者:定義同事(Colleague)對象到中介者(Mediatior)對象的接口,通常是一個事件方法。
    2) 具體中介者:具體中介者實現抽象中介者聲明的方法。知曉所有的具體同事類,從具體同事接收消息向另外的具體同事類發送命令。
    3) 抽象同事類:定義中介者到同事對象的接口,同事對象只知道中介者而不知道其他同事對象。
    三、一個例子

       1: import java.util.ArrayList;
       2:  
       3: abstract class AbstractMediator{
       4:  public abstract void register(AbstractColleague ac);
       5:  public abstract void ColleagueChanged(AbstractColleague ac);
       6: }
       7: abstract class AbstractColleague{
       8:  private AbstractMediator med;
       9:  public AbstractColleague(AbstractMediator mediator){
      10:   this.med=mediator;
      11:  }
      12:  public abstract void action();
      13:  public void changed(){
      14:   med.ColleagueChanged(this);
      15:  }
      16: }
      17: class ConcreteMediator extends AbstractMediator{
      18:  
      19:  private ArrayList<AbstractColleague> colleagueList=new ArrayList<AbstractColleague>();
      20:  public void register(AbstractColleague ac) {
      21:   colleagueList.add(ac); 
      22:  }
      23:  
      24:  public void ColleagueChanged(AbstractColleague ac) {
      25:   for(int i=0;i<colleagueList.size();i++){
      26:    if(colleagueList.get(i)!=ac){
      27:     colleagueList.get(i).action();
      28:    }
      29:   }
      30:  }
      31: }
      32:  
      33: class ConcreteColleagueA extends AbstractColleague{
      34:     public ConcreteColleagueA(AbstractMediator mediator){
      35:      super(mediator);
      36:      mediator.register(this);
      37:     }
      38:  public void action() {
      39:   System.out.println("AAAAAAAAAAAAAAA");
      40:  }
      41: }
      42: class ConcreteColleagueC extends AbstractColleague{
      43:     public ConcreteColleagueC(AbstractMediator mediator){
      44:      super(mediator);
      45:      mediator.register(this);
      46:     }
      47:  public void action() {
      48:   System.out.println("CCCCCCCCCCCCCCC");
      49:  }
      50: }
      51: class ConcreteColleagueB extends AbstractColleague{
      52:   public ConcreteColleagueB(AbstractMediator mediator){
      53:       super(mediator);
      54:       mediator.register(this);
      55:      }
      56:   public void action() {
      57:    System.out.println("BBBBBBBBBBBBBBB");
      58:   }
      59: }
      60: class test{
      61:  public static void main(String[] args){
      62:  AbstractMediator mediator=new ConcreteMediator();
      63:  AbstractColleague colleagueA=new ConcreteColleagueA(mediator);
      64:  AbstractColleague colleagueB=new ConcreteColleagueB(mediator);
      65:  AbstractColleague colleagueC=new ConcreteColleagueC(mediator);
      66:  colleagueA.changed();
      67:  colleagueB.changed();
      68:  colleagueC.changed();
      69:  }
      70: }
      71:  

    五、 優缺點
    1)減少了子類生成Mediator將原本分布于多個對象間的行為集中在一起,改變這些行為只需生成Mediator的子類即可,這樣各個Colleague類可被重用。
    2)它將各Colleague解耦。Mediator有利于各Colleague間的松耦合,你可以獨立的改變和復用各Colleague類和Mediator類。
    3)它簡化了對象協議用Mediator和各Colleague間的一對多的交互來代替多對多的交互。一對多的關系更易于理解、維護和擴展。
    4)它對對象如何協作進行了抽象將中介作為一個獨立的概念并將其封裝在一個對象中,使你將注意力從對象各自本身的行為轉移到它們之間的交互上來。這有助于弄清楚一個系統中的對象是如何交互的。
    5)它使控制集中化,中介者模式將交互的復雜性變為中介者的復雜性。因為中介者封裝了協議,它可能變得比任一個Colleague都復雜。這可能使得中介者自身成為一個難于維護的龐然大物。
    六、 適用性
    1)一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。
    2)一個對象引用其他很多對象并且直接與這些對象通信,導致難以復用該對象。

    posted on 2011-02-08 17:32 人在江湖 閱讀(644) 評論(0)  編輯  收藏 所屬分類: design pattern
    主站蜘蛛池模板: 亚洲国产精品线观看不卡| 国产AV无码专区亚洲AVJULIA| 国产激情久久久久影院老熟女免费| 亚洲AV成人精品网站在线播放 | 亚洲色一色噜一噜噜噜| 114一级毛片免费| 日本在线免费播放| 黄色a三级三级三级免费看| 亚洲熟妇av午夜无码不卡| 亚洲视频精品在线观看| 亚洲视频在线免费播放| 国产亚洲精品a在线观看app | www在线观看免费视频| 精品国产日韩亚洲一区91| 亚洲欧洲精品成人久久曰| 亚洲成a人片在线看| 国产人成亚洲第一网站在线播放| 99人中文字幕亚洲区| 亚洲理论片在线中文字幕| 亚洲第一页在线观看| 亚洲一线产区二线产区区| 亚洲中文字幕无码爆乳| 亚洲高清毛片一区二区| 免费精品国产自产拍在线观看| 免费在线观看自拍性爱视频| 产传媒61国产免费| 日本免费久久久久久久网站| 在线a免费观看最新网站| 无限动漫网在线观看免费| 日本xxwwxxww在线视频免费| 亚洲五月午夜免费在线视频| 黑人大战亚洲人精品一区 | 成人毛片免费视频| 亚洲精品A在线观看| 久久久亚洲欧洲日产国码aⅴ | 免费jlzzjlzz在线播放视频| 久久精品国产亚洲av麻豆| 亚洲人av高清无码| 毛片免费在线观看| 四虎免费久久影院| 亚洲视频免费在线播放|