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

一、什么是中介者模式?

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

类型:行为型模式

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

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


二、中介者模式UML

013902_vQvD_2003960.png

三、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 !!



转载于:https://my.oschina.net/u/2003960/blog/535663

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值