中介者模式用一个中介对象来封装一系列的对象交互,从而使它们可以较松散的耦合。

1) 抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。
2) 具体中介者(Concrete
Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。
3) 同事(Colleague)角色:每一个同事角色都知道对应的具体中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。
在此写了7个java类来描述说明Mediator设计模式的实现方式;
  1、
Colleague.java   交互对象的抽象类
  2、 Colleague1.java  交互对象1
  3、 Colleague2.java  交互对象2
  4、 Colleague3.java  交互对象3
  5、 Mediator.java    中介者抽象类
  6、 ConcreteMediator.java 具体的中介者
  7、 MediatorTest.java     带有main方法的测试类
===============   1、
Colleague.java
交互对象的抽象类,定义了中介者的注入方法 、交互的行为方法
package mediator;
public abstract class Colleague {
  //中介者
  private Mediator mediator;
  public Mediator getMediator() {
    return mediator;
  }
  public Colleague(Mediator m) {
    mediator = m;
  }
 
  //消息
  private String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
  //发送消息
  public abstract void sendMsg();
  //收到消息
  public abstract void getMsg(String msg);
  //发送消息
  public void sendMsg(String msg) {
    this.message = msg;
    mediator.action(this);
  }
}
===============   1 end
===============   2、
Colleague1.java
package mediator;
public class Colleague1 extends Colleague {
  public Colleague1(Mediator m) {
    super(m);
  }
  public void getMsg(String msg) {
    System.out.println("Colleague1 has got  the
message  -'" + msg + "'");
  }
  public void sendMsg() {
    System.out.println("Colleague1 has send the message
'" + getMessage() + "'");
  }
}
===============   2 end
===============   3、
Colleague2.java
package mediator;
public class Colleague2 extends Colleague {
  public Colleague2(Mediator m) {
    super(m);
  }
  public void getMsg(String msg) {
    System.out.println("Colleague2 has got  the
message  -'" + msg + "'");
  }
  public void sendMsg() {
    System.out.println("Colleague2 has send the message
'" + getMessage() + "'");
  }
}
===============   3 end
===============   4、
Colleague3.java
package mediator;
public class Colleague3 extends Colleague {
  public Colleague3(Mediator m) {
    super(m);
  }
  public void getMsg(String msg) {
    System.out.println("Colleague3 has got  the
message  -'" + msg + "'");
  }
  public void sendMsg() {
    System.out.println("Colleague3 has send the message
'" + getMessage() + "'");
  }
}
===============   4 end
===============   5、
Mediator.java
package mediator;
abstract class Mediator {
  //Mediator针对Colleague的一个交互行为
  public abstract void action(Colleague sender);
  //加入Colleague对象
  public abstract void addCollegue(Colleague colleague);
}
===============   5 end
===============   6、
ConcreteMediator.java
  具体的中介者,负责管理Colleague对象间的关系、以及Colleague对象间的交互
package mediator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteMediator extends Mediator {
  private List<Colleague> colleagues = new
ArrayList<Colleague>(0);
 
  public void addCollegue(Colleague colleague) {
    colleagues.add(colleague);
  }
  public void action(Colleague actor) {
    String msg = actor.getMessage();
    //send msg
    for (Colleague colleague : colleagues) {
      if(colleague.equals(actor)){
        colleague.sendMsg();
        break;
      }
    }
   
    //got msg
    for (Colleague colleague : colleagues) {
      if(colleague.equals(actor))
        continue;
       
      colleague.getMsg(msg);
    }
  }
}
===============   6 end
===============   7、
MediatorTest.java
package mediator;
public class MediatorTest {
  public static void main(String[] args) {
   //生成中介者 并注入到各个Colleague对象中
    Mediator mediator = new ConcreteMediator();
    Colleague colleague1 = new Colleague1(mediator);
    Colleague colleague2 = new Colleague2(mediator);
    Colleague colleague3 = new Colleague3(mediator);
 
 //注册对象到中介
    mediator.addCollegue(colleague1);
    mediator.addCollegue(colleague2);
    mediator.addCollegue(colleague3);
   
 //Colleague1 触发行为
    colleague1.sendMsg("Hi,it's time to lunch. Let's
go!");
    System.out.println();
    //Colleague2 触发行为
    colleague2.sendMsg("Is anybody here!");
    System.out.println();
    //Colleague3 触发行为
    colleague3.sendMsg("Wait!I will lunch off right away.");
    System.out.println();
   
  }
}
===============   7 end
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号