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

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

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

    Chan Chen Coding...

    Ten: Mediator Design Pattern

    Refer to: http://blog.sina.com.cn/s/blog_3fe961ae0100qbz6.html
    意圖
    通過引入中介者模式來在對象之間傳遞消息(承擔中介者),以簡化對象之間的通信。
    什么是中介者模式
    中介者模式包裝了一系列對象相互作用的方式,使得這些對象不必互相明顯引用。從而使它們可以較松散地耦合。當這些對象中的某些對象之間的相互作用發生改變時,不會立即影響到其他的一些對象之間的相互作用。從而保證這些相互作用可以彼此獨立地變化。
    在中介者模式中,所有的成員對象者可以協調工作,但是又不直接相互管理。這些對象都與一個處于中心地位的中介者對象發生緊密的關系,由這個中介者對象進行協調工作。這個協調者對象叫做中介者(Mediator),而中介者所協調的成員對象稱做同事(Colleague)對象。
    類圖
    角色
    (1)抽象中介者(Mediator)角色:定義出同事對象到中介者對象的接口,其中主要的方法是一個(或者多個)事件方法。在有些情況下,這個抽象對象可以省略。
    (2)具體中介者(ConcreteMediator)角色:從抽象中介者繼承而來,實現了抽象超類所聲明的事件方法。具體中介者知曉所有的具體同事類,它從具體同事對象接收消息、向具體同事對象發出命令。
    (3)抽象同事類(Colleague)角色:定義出中介者到同事對象的接口。同事對象只知道中介者而不知道其余的同事對象。
    (4)具體同事類(ConcreteColleague)角色:所有的具體同事類均從抽象同事類繼承而來。每一個具體同事類都很清楚它自己在小范圍內的行為,而不知道它在大范圍內的目的。在示意性的類圖中,具體同事類是Colleague1和Colleague2。
     
    源代碼
    package 中介者模式;
    //抽象中介者
    public abstract class Mediator {
     
    //事件方法,由子類實現
    public abstract void colleagueChanged(Colleague c);
    }
     
     
    package 中介者模式;
    //抽象同事類
    public abstract class Colleague {
      private Mediator mediator;
     
    //構造函數,中介者作為參數
    public Colleague(Mediator m){
      this.mediator=m;
    }
     
    public Mediator getMediator(){
      return this.mediator;
    }
     
    //行動方法,由子類實現
    public abstract void action();
     
    //當同事對象發生變化時,告知中介者
    public void change(){
      mediator.colleagueChanged(this);
    }
    }
     
     
    package 中介者模式;
     
    public class Colleague1 extends Colleague {
     
    public Colleague1(Mediator m) {
      super(m);
    }
     
    @Override
    public void action() {
      System.out.println("Colleague1 action");
    }
     
    }
     
     
     
    package 中介者模式;
     
    public class Colleague2 extends Colleague {
     
    public Colleague2(Mediator m) {
      super(m);
    }
     
    @Override
    public void action() {
      System.out.println("Colleague2 action");
    }
     
    }
     
     
     
    package 中介者模式;
    //具體中介者
    public class ConcreteMediator extends Mediator{
     
    private Colleague1 colleague1;
    private Colleague2 colleague2;
     
    @Override
    public void colleagueChanged(Colleague c) {
    //中介者通知其它同事對象作出響應,實際的代碼要復雜得多
      if(c==colleague1){
        System.out.println("colleague1發生改變,其他同事對象作出響應");
        this.colleague2.action();
      }else if(c==colleague2){
        System.out.println("colleague2發生改變,其他同事對象作出響應");
        this.colleague1.action();
      }
    }
     
    public void createConcreteColleague(){
      colleague1=new Colleague1(this);
      colleague2=new Colleague2(this);
    }
     
    public Colleague1 getColleague1() {
      return colleague1;
    }
     
    public Colleague2 getColleague2() {
    return colleague2;
    }
    }
     
     
    package 中介者模式;
     
    public class Client {
    public static void main(String[] args) {
      ConcreteMediator m = new ConcreteMediator();
      m.createConcreteColleague();
      Colleague c1=m.getColleague1();
      Colleague c2=m.getColleague2();
      c1.change();
      c2.change();
     }
    }
     
    輸出:
    colleague1發生改變,其他同事對象作出響應
    Colleague2 action
    colleague2發生改變,其他同事對象作出響應
    Colleague1 action


    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2012-11-05 11:45 Chan Chen 閱讀(237) 評論(0)  編輯  收藏 所屬分類: Design Pattern

    主站蜘蛛池模板: 四虎影视精品永久免费网站| 久久久久无码专区亚洲av| 亚洲gay片在线gv网站| 亚洲区不卡顿区在线观看| 永久在线观看免费视频| 亚洲人成7777| 伊人亚洲综合青草青草久热| 最好看的中文字幕2019免费| 亚洲乱码国产乱码精华| 亚洲国产精品国自产拍AV| 成**人免费一级毛片| 国产一区二区免费视频| 亚洲午夜无码久久| 久久香蕉国产线看观看亚洲片| 成人免费无码大片a毛片| 两个人看的www免费高清| 亚洲xxxx视频| 久久久久亚洲AV成人无码| 日本久久久免费高清| 久久国产免费一区| 免费国产黄网站在线观看动图| 亚洲欧洲精品国产区| 久久精品国产精品亚洲艾草网美妙| 97国产免费全部免费观看| 国产伦精品一区二区免费| 亚洲国产精品精华液| 亚洲综合久久成人69| 国产aⅴ无码专区亚洲av麻豆| 免费黄色毛片视频| 亚洲免费观看网站| 免费a级毛片无码a∨免费软件 | 亚洲视频在线一区二区三区| 免费va人成视频网站全| 免费无码黄十八禁网站在线观看| 可以免费观看的国产视频| www在线观看免费视频| 国产亚洲精彩视频| 亚洲国产精品精华液| 亚洲va久久久久| 色婷五月综激情亚洲综合| 久久亚洲精品成人AV|