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

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

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

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

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

先看类图吧:

中介者模式--充当联合国的角色_第1张图片


如上图,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)


你可能感兴趣的:(设计模式,设计模式学习笔记)