人在江湖

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

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

             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:  

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

          posted on 2011-02-08 17:32 人在江湖 閱讀(654) 評(píng)論(0)  編輯  收藏 所屬分類: design pattern
          主站蜘蛛池模板: 西贡区| 宿迁市| 城市| 富源县| 庄河市| 苍南县| 崇义县| 苍溪县| 蕉岭县| 惠水县| 锦州市| 仁怀市| 桓仁| 满城县| 高安市| 花莲县| 和静县| 镇江市| 龙山县| 芦山县| 和林格尔县| 榆社县| 广水市| 东明县| 宜丰县| 正蓝旗| 凤阳县| 沙田区| 武汉市| 阆中市| 郸城县| 宜川县| 依安县| 平谷区| 金乡县| 六枝特区| 龙岩市| 叶城县| 应用必备| 甘南县| 漠河县|