Chan Chen Coding...

          導航

          統(tǒng)計

          文章分類

          文章檔案

          最新評論

          Ten: Mediator Design Pattern

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

          主站蜘蛛池模板: 镇原县| 南平市| 阜南县| 济源市| 图木舒克市| 原阳县| 乌鲁木齐市| 北海市| 都兰县| 台中市| 枣强县| 怀柔区| 河西区| 察隅县| 简阳市| 雷州市| 兴宁市| 临澧县| 江阴市| 航空| 马关县| 皋兰县| 荔浦县| 罗源县| 宁阳县| 曲阳县| 金溪县| 诸暨市| 彩票| 梁平县| 惠安县| 芦山县| 凉城县| 连州市| 洛川县| 屏东县| 耿马| 广宗县| 德州市| 平果县| 衡东县|