一、定义
用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式的相互引用,从而使其偶呵呵松散,而且可以独立地改变他们之间的交互。
中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及向定制一个分部在多个类中的行为,而又不想生成太多的子类的场合。
二、结构图
三、代码示例
1、中介者模式测试Action.java
/**
* @use 测试中介者模式
* @author lattice
* @date 2017-01-09
*/
public class Action {
public static void main(String[] args) {
ConcreteMediator mediator=new ConcreteMediator();
ConcreteColleage1 colleage1=new ConcreteColleage1(mediator);
ConcreteColleage2 colleage2=new ConcreteColleage2(mediator);
mediator.setColleage1(colleage1);
mediator.setColleage2(colleage2);
colleage1.send("你好啊!");
System.out.println("*****************");
colleage2.send("你好,很高兴认识你!");
/**
* 输出结果:
*
你好啊!
同事2得到消息:你好啊!
*****************
你好,很高兴认识你!
同事1得到消息:你好,很高兴认识你!
*/
}
}
2、中介者及同事类代码Mediator.java
/**
* 中介类
* @author lattice
*
*/
public abstract class Mediator {
public abstract void send(String message,Colleage colleage);
}
/**
* 具体中介类
* @author lattice
*
*/
class ConcreteMediator extends Mediator{
private ConcreteColleage1 colleage1;
private ConcreteColleage2 colleage2;
public void setColleage1(ConcreteColleage1 colleage1){
this.colleage1=colleage1;
}
public void setColleage2(ConcreteColleage2 colleage2){
this.colleage2=colleage2;
}
@Override
public void send(String message, Colleage colleage) {
System.out.println(message);
if(colleage==colleage1){
colleage2.nodify(message);
}
else{
colleage1.nodify(message);
}
}
}
/**
* 同事类
* @author lattice
*
*/
abstract class Colleage{
protected Mediator mediator;
public Colleage(Mediator mediator){
this.mediator=mediator;
}
}
/**
* 同事1,继承同事类
* @author lattice
*
*/
class ConcreteColleage1 extends Colleage{
public ConcreteColleage1(Mediator mediator) {
super(mediator);
}
public void send(String message){
mediator.send(message, this);
}
public void nodify(String message){
System.out.println("同事1得到消息:"+message);
}
}
/**
* 同事2,继承同事类
* @author lattice
*
*/
class ConcreteColleage2 extends Colleage{
public ConcreteColleage2(Mediator mediator) {
super(mediator);
}
public void send(String message){
mediator.send(message, this);
}
public void nodify(String message){
System.out.println("同事2得到消息:"+message);
}
}