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 阅读(233) 评论(0)  编辑  收藏 所属分类: Design Pattern


只有注册用户登录后才能发表评论。


网站导航: