<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久| 日韩人妻无码精品久久免费一| 丁香花在线视频观看免费| mm1313亚洲国产精品美女| 亚洲国色天香视频| 波多野结衣在线免费视频| 亚洲午夜精品一区二区公牛电影院| 亚洲电影在线免费观看| 亚洲国产精品综合久久20| 好吊妞788免费视频播放| 亚洲av永久无码| 国产传媒在线观看视频免费观看| 国产偷国产偷亚洲高清在线| 国产精品免费视频网站| 人妻18毛片a级毛片免费看| 97国产免费全部免费观看| 亚洲fuli在线观看| 手机看片久久国产免费| 亚洲日韩在线观看免费视频| 亚洲精品乱码久久久久久| 99久久99久久精品免费观看| 亚洲av永久综合在线观看尤物| 免费观看大片毛片| WWW免费视频在线观看播放| 亚洲国产精品婷婷久久| 国产成人无码免费看视频软件 | 亚洲区视频在线观看| 在线精品免费视频| 国产成人无码精品久久久免费| 亚洲av中文无码乱人伦在线r▽| 97视频免费在线| 一级特黄录像免费播放中文版| 成人毛片18女人毛片免费| 色吊丝性永久免费看码| 亚洲激情在线视频| 亚洲欧洲精品成人久久曰| 亚洲精品视频观看| 毛片免费在线播放| 久草免费福利在线| 亚洲狠狠久久综合一区77777|