设计模式-中介者模式

UML类图设计模式-中介者模式

使用场景

当两个对象之间经常需要交互的时候,为了使得这两个对象不相互耦合,而设计一个中介,两个对象不需要相互知道对方,而只需要知道中介,而中介者需要知道所有交互的对象。
如,Frame窗口中,各个组件进行消息交换,点击Button显示一句话到TextArea,其中Frame充当中介者。又如QQ聊天,每个用户之间不会相互依赖,而是通过中间的QQ平台进行信息交互。
设计模式-中介者模式
如上图所示,原本相互耦合,杂乱无章的交互方式通过中介者进行交互,而使得各个类之间的耦合程度大大降低。

代码实现

public abstract class Mediator {
	protected Colleague concreteColleague1;
	protected Colleague concreteColleague2;
	public void setColleague1(Colleague concreteColleague1){
		this.concreteColleague1 = concreteColleague1;
	}
	public void setColleague2(Colleague concreteColleague2){
		this.concreteColleague2 = concreteColleague2;
	}
	public abstract void execute(String message,Colleague colleague);
}
public abstract class Colleague {
	protected Mediator mediator;
	public void setMediator(Mediator mediator){
		this.mediator = mediator;
	}
	public abstract void operation(String message);
}
public class ConcreteMediator extends Mediator {
	@Override
	public void execute(String message,Colleague colleague) {
		if(colleague == concreteColleague1){
			concreteColleague2.operation(message);
		}else{
			concreteColleague1.operation(message);
		}
	}
}
public class ConcreteColleague1 extends Colleague {
	@Override
	public void operation(String message) {
		System.out.println("ConcreteColleague1 accept message:"+message);
	}
	public void send(String message){
		mediator.execute(message, this);
	}
}
public class ConcreteColleague2 extends Colleague {
	@Override
	public void operation(String message) {
		System.out.println("ConcreteColleague2 accept message:"+message);
	}
	public void send(String message){
		mediator.execute(message, this);
	}
}

运行结果:
ConcreteColleague2 accept message:Hello, I’m ConcreteColleague1
ConcreteColleague1 accept message:Hello, I’m ConcreteColleague2