设计模式----中介者模式UML和实现代码

原创
2015/11/26 01:46
阅读数 109

一、什么是中介者模式?

中介者模式(Mediator)定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

类型:行为型模式

顺口溜:访策备迭 观模命状职解

个人感觉,中介者模式是比较复杂的设计模式,想要真正掌握它还需要多多思考。


二、中介者模式UML

三、JAVA代码实现

package com.amosli.dp.behavior.mediator;

public class Client {
	public static void main(String[] args) {
		ConcreteMediator mediator = new ConcreteMediator();
		ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
		ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

		mediator.setColleague1(colleague1);
		mediator.setColleague2(colleague2);
		
		colleague1.send(" hi,this is c1 ");
		colleague2.send(" hi,this is c2 ");
	}
}


package com.amosli.dp.behavior.mediator;

public abstract class Colleague {
	protected Mediator mediator;

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


package com.amosli.dp.behavior.mediator;

public class ConcreteColleague1 extends Colleague {

	public ConcreteColleague1(Mediator mediator) {
		super(mediator);
	}

	public void send(String msg) {
		mediator.sendMsg(msg, this);
	}

	public void notify(String msg) {
		System.out.println("colleague1 getMsg:" + msg);
	}
}


package com.amosli.dp.behavior.mediator;

public class ConcreteColleague2 extends Colleague {

	public ConcreteColleague2(Mediator mediator) {
		super(mediator);
	}

	public void send(String msg) {
		mediator.sendMsg(msg, this);
	}

	public void notify(String msg) {
		System.out.println("colleague2 get msg:" + msg);
	}
}


package com.amosli.dp.behavior.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
	void sendMsg(String msg, Colleague colleague) {
		if(colleague==colleague1){
			colleague2.notify(msg);
		}else{
			colleague1.notify(msg);
		}
	}
}


package com.amosli.dp.behavior.mediator;

public abstract class Mediator {
	abstract  void sendMsg(String msg,Colleague colleague);
}

四、使用场景

使用终结者模式的场合

1.一组定义良好的对象,现在要进行复杂的通信。

2.定制一个分布在多个类中的行为,而又不想生成太多的子类。

可以看出,中介对象主要是用来封装行为的,行为的参与者就是那些对象,但是通过中介者,这些对象不用相互知道。呵呵~~~

使用中介者模式的优点:

1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。

2.提高系统的灵活性,使得系统易于扩展和维护。

使用中介者模式的缺点:

中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。

五、源码地址

本系列文章源码地址,https://github.com/amosli/dp  欢迎Fork  & Star !!



展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部