<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
    意圖
    通過引入中介者模式來在對象之間傳遞消息(承擔(dān)中介者),以簡化對象之間的通信。
    什么是中介者模式
    中介者模式包裝了一系列對象相互作用的方式,使得這些對象不必互相明顯引用。從而使它們可以較松散地耦合。當(dāng)這些對象中的某些對象之間的相互作用發(fā)生改變時(shí),不會立即影響到其他的一些對象之間的相互作用。從而保證這些相互作用可以彼此獨(dú)立地變化。
    在中介者模式中,所有的成員對象者可以協(xié)調(diào)工作,但是又不直接相互管理。這些對象都與一個(gè)處于中心地位的中介者對象發(fā)生緊密的關(guān)系,由這個(gè)中介者對象進(jìn)行協(xié)調(diào)工作。這個(gè)協(xié)調(diào)者對象叫做中介者(Mediator),而中介者所協(xié)調(diào)的成員對象稱做同事(Colleague)對象。
    類圖
    角色
    (1)抽象中介者(Mediator)角色:定義出同事對象到中介者對象的接口,其中主要的方法是一個(gè)(或者多個(gè))事件方法。在有些情況下,這個(gè)抽象對象可以省略。
    (2)具體中介者(ConcreteMediator)角色:從抽象中介者繼承而來,實(shí)現(xiàn)了抽象超類所聲明的事件方法。具體中介者知曉所有的具體同事類,它從具體同事對象接收消息、向具體同事對象發(fā)出命令。
    (3)抽象同事類(Colleague)角色:定義出中介者到同事對象的接口。同事對象只知道中介者而不知道其余的同事對象。
    (4)具體同事類(ConcreteColleague)角色:所有的具體同事類均從抽象同事類繼承而來。每一個(gè)具體同事類都很清楚它自己在小范圍內(nèi)的行為,而不知道它在大范圍內(nèi)的目的。在示意性的類圖中,具體同事類是Colleague1和Colleague2。
     
    源代碼
    package 中介者模式;
    //抽象中介者
    public abstract class Mediator {
     
    //事件方法,由子類實(shí)現(xiàn)
    public abstract void colleagueChanged(Colleague c);
    }
     
     
    package 中介者模式;
    //抽象同事類
    public abstract class Colleague {
      private Mediator mediator;
     
    //構(gòu)造函數(shù),中介者作為參數(shù)
    public Colleague(Mediator m){
      this.mediator=m;
    }
     
    public Mediator getMediator(){
      return this.mediator;
    }
     
    //行動(dòng)方法,由子類實(shí)現(xiàn)
    public abstract void action();
     
    //當(dāng)同事對象發(fā)生變化時(shí),告知中介者
    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) {
    //中介者通知其它同事對象作出響應(yīng),實(shí)際的代碼要復(fù)雜得多
      if(c==colleague1){
        System.out.println("colleague1發(fā)生改變,其他同事對象作出響應(yīng)");
        this.colleague2.action();
      }else if(c==colleague2){
        System.out.println("colleague2發(fā)生改變,其他同事對象作出響應(yīng)");
        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發(fā)生改變,其他同事對象作出響應(yīng)
    Colleague2 action
    colleague2發(fā)生改變,其他同事對象作出響應(yīng)
    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

    主站蜘蛛池模板: 一个人看的在线免费视频| 亚洲免费视频播放| 自拍偷自拍亚洲精品播放| 日韩精品无码区免费专区| 亚洲精品高清国产麻豆专区| 野花香高清在线观看视频播放免费| 中文字幕不卡亚洲| 中国一级毛片视频免费看| 亚洲无码在线播放| 日本免费中文字幕| 亚洲国产综合专区电影在线| 99精品视频在线观看免费播放| 久久久久亚洲AV片无码| 在线观看的免费网站无遮挡| 亚洲国产精品日韩在线| 最近免费中文字幕视频高清在线看| 亚洲字幕AV一区二区三区四区| 成人免费毛片观看| 美女露隐私全部免费直播| 亚洲第一页综合图片自拍| 国产99视频精品免费视频76| 久久精品国产96精品亚洲| 1000部禁片黄的免费看| 亚洲日韩精品国产一区二区三区| 热久久精品免费视频| 亚洲一区二区三区免费| 亚洲视频一区在线| 成全影视免费观看大全二| 无套内射无矿码免费看黄| 人人狠狠综合久久亚洲婷婷| 91精品啪在线观看国产线免费| 亚洲中文无码线在线观看| 日本视频免费在线| 久久性生大片免费观看性| 亚洲国产综合精品中文第一区| 最近中文字幕无吗高清免费视频| 一区免费在线观看| 亚洲黄色在线电影| 免费在线观看一级毛片| 四虎影视成人永久免费观看视频 | 国产精品亚洲专区无码唯爱网|