<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 人在江湖 閱讀(653) 評論(0)  編輯  收藏 所屬分類: design pattern
    主站蜘蛛池模板: 中文字幕成人免费高清在线视频 | 美女扒开尿口给男人爽免费视频| 无码免费午夜福利片在线| 亚洲永久中文字幕在线| 亚洲大片免费观看| 亚洲中文字幕久久精品无码2021| 57pao一国产成视频永久免费| 亚洲精品国产第1页| 嫖丰满老熟妇AAAA片免费看| 亚洲AV成人噜噜无码网站| 成年女人免费碰碰视频| 亚洲Av无码国产一区二区| 四虎永久在线精品免费影视| 九九视频高清视频免费观看| 亚洲精品无码久久久久去q | 国产亚洲精品资在线| 国产午夜精品免费一区二区三区| 久久精品国产亚洲av水果派| 成人免费毛片内射美女APP| 337P日本欧洲亚洲大胆艺术图 | 中文字幕亚洲综合久久2| 最近中文字幕mv手机免费高清 | 亚洲国产区男人本色| yy6080亚洲一级理论| 国产免费无码AV片在线观看不卡| 久久久久久久亚洲Av无码| 免费a级毛片高清视频不卡| 久久无码av亚洲精品色午夜| 中国亚洲女人69内射少妇| 免费A级毛片无码A∨| 亚洲GV天堂无码男同在线观看| 亚洲欧洲自拍拍偷精品 美利坚| 日本免费人成视频在线观看| 亚洲精品无码中文久久字幕| 亚洲午夜国产精品无码 | 久久久久久av无码免费看大片| 色婷婷亚洲十月十月色天| 日本黄色免费观看| 毛片免费在线观看| 亚洲av永久无码精品秋霞电影秋| 亚洲三区在线观看无套内射|