调停者模式(Mediator)

调停者模式的意图:定义一个对象,封装一组对象的交互,从而降低对象之间的耦合度,避免对象之间的显示调用,并且可以独立的改变对象的行为

其UML图如下所示:

该模式包括如下角色:

Mediator:声明同事对象到调停者的接口,主要是一系列的事件方法,即Colleague中发生一个事件促使其去调用Mediator的对应方法

ConcreteMediator:用于聚合各个同事对象,同时实现Mediator中定义的方法用于同事之间的交互

Colleague:定义同事对象和调停者之间交互的接口,主要是获取调停者对象的方法

ConcreteColleague:具体同事类,主要实现自己的业务逻辑,当需要与其他同事类协调时,调用调停者,由调停者负责与其他同事类之间的通信


下面是一个实例:

// 同事类
class Colleague {
	protected Mediator mediator;
	
	public void setMediator(Mediator m){
		mediator = m;
	}
	public Mediator getMediator(){
		return mediator;
	}
}
// 具体同事类
class ConcreteColleague1 extends Colleague{
	public void operate(){
		mediator.changed(this);
	}
	public void display(){
		System.out.println("ConcreteColleague1.dispaly() is called");
	}
}
// 具体同事类
class ConcreteColleague2 extends Colleague{
	public void operate(){
		mediator.changed(this);
	}
	public void display(){
		System.out.println("ConcreteColleague2.display() is called");
	}
}
// 调停者接口
interface Mediator {
	public void changed(Colleague c);
}
// 调停者实现类
class ConcreteMediator implements Mediator {
	private ConcreteColleague1 c1 = null;
	private ConcreteColleague2 c2 = null;
	
	public void setColleague1(ConcreteColleague1 c1){
		this.c1 = c1;
	}
	
	public void setColleague2(ConcreteColleague2 c2){
		this.c2 = c2;
	}
	@Override
	public void changed(Colleague c) {
		if(c instanceof ConcreteColleague1){
			c2.display();
		}else if (c instanceof ConcreteColleague2){
			c1.display();
		}
	}
	
}
调停者模式的效果:

1.组件间的耦合度降低

2. 多对多的复杂模型变成一对多的简单模型

3. 组件间的交互集中控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值