设计模式-中介者模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值