中介者模式--充当联合国的角色

中介者模式,听名字应该很好理解。

中介者模式(Mediator),用一个中介对象来封装一系列的对象交互,

中介者是对象不需要显式的的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。

也就是两个类不自己关联,而给中介者去完成相互之间的事情。

先看类图吧:



如上图,ConcreteColleague1和ConcreteColleague2分别是两个具体的待交互的类。

而ConcreteMediator充当具体的中介者。

Mediator的出现减少了各个Colleague的耦合,使得可以独立的改变和福永各个Colleague和Mediator。

中介者模式一般应用于一组对象以定义良好但是复杂的方式进行    通信    的场合,

以及想定制一个分布在多个类中的行为,而又不想生成太多子类的场合。

下面看具体类源代码:

Mediator类:

package com.blog.anla.Mediator;
/**
 * 定义一个抽象的发送消息方法,
 * 得到同事对象和发送消息
 * @author U-ANLA
 *
 */
public abstract class Mediator {
	public abstract void send(String message,Colleague colleague);
}


ConcreteMediator类:

package com.blog.anla.Mediator;

public class ConcreteMediator extends Mediator{
	private ConcreteColleague1 colleague1;
	private ConcreteColleague2 colleague2;
	
	public void setColleague1(ConcreteColleague1 colleague1) {
		this.colleague1 = colleague1;
	}
	
	public void setColleague2(ConcreteColleague2 colleague2) {
		this.colleague2 = colleague2;
	}
	
	@Override
	public void send(String message, Colleague colleague) {
		if(colleague == colleague1){
			colleague2.notify(message);
		}else{
			colleague1.notify(message);
		}
	}
	
	
}


Colleague类:

package com.blog.anla.Mediator;

public class Colleague {
	protected Mediator mediator;
	
	public Colleague(Mediator mediator){
		this.mediator = mediator;
	}
}


ConcreteColleague1类:

package com.blog.anla.Mediator;

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);
	}
}


ConcreteColleague2类:

package com.blog.anla.Mediator;

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);
	}
}


从代码中可以看到,colleague1和colleague2之间并没有交际,

他们的交集都是交由给ConcreteMediator的send方法来实现的。


是吧,如果有帮助,顶一下哇

赠人玫瑰手留余香(oo)


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值