原文地址:http://www.cnblogs.com/jyyzzjl/p/5187376.html
一、概述
用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。
二、特点
1、有多个系统或者对象发生交互,但又不能直接进行交互;
2、通过一个中介者来保留所有的交互对象(又叫同事类)的引用;
3、同事类同事也需要保留中介者的引用,以便调用中介者中的方法与其他同事类发生交互
4、中介者根据实际情况,如果系统复杂,有多个中介者,那么可以编写抽象中介者,如果没有则直接编写具体中介者
三、UML类图
例子:
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator){
this.mediator=mediator;
}
}
public abstract class Mediator {
public abstract void send(String msg,Colleague colleague);
}
public class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void send(String message){
mediator.send(message, this);
}
public void notify(String message){
System.out.println("同事1得到的消息为:"+message);
}
}
public class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void send(String message){
mediator.send(message, this);
}
public void notify(String message){
System.out.println("同事2得到的消息为:"+message);
}
}
public class ConcreteMediator extends Mediator {
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public void setColleague1(ConcreteColleague1 colleague){
this.colleague1=colleague;
}
public void setColleague2(ConcreteColleague2 colleague){
this.colleague2=colleague;
}
@Override
public void send(String msg, Colleague colleague) {
if(colleague==colleague1){
colleague2.notify(msg);
}else {
colleague1.notify(msg);
}
}
}
public class Client {
public static void main(String[] args) {
ConcreteMediator mediator=new ConcreteMediator();
ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);
mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2);
colleague1.send("吃饭了吗?");
colleague2.send("吃过了");
}
}