欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式之中介者模式

程序员文章站 2024-03-23 08:35:52
...

一.什么是中介者模式

中介者模式是一种行为性设计模式,降低多个类或对象之间的通信复杂性,提供一种中介类,处理不同的类之间的交互,降低各类之间的耦合性,使得代码更利于维护。

二.中介者模式怎么写

所谓的中介者就像一个路由一样,承担着路由的作用,使得各个端不在吃过对方的引用,都是通过路由来进行访问,想像一下,中介者就像联合国,各个端点就像是各个国家,各个国家都是通过路由来进行交互。来看下面的UML类图。设计模式之中介者模式
上代码:

/**
 *
 * @author Seven
 *
 */
public abstract class Mediator {

	protected abstract void sendMessage(String msg,Colleague colleague);
}

/**
 * @author Seven
 *
 */
public class ConcreteMediator extends Mediator {

	public ChinaColleague chinaColleague;
	public UsaColleague usaColleague;

	public ConcreteMediator() {
		super();

	}

	@Override
	protected void sendMessage(String msg, Colleague colleague) {
		if (colleague == usaColleague) {
			chinaColleague.noticeMessage(msg);
			return;

		}
		if (colleague == chinaColleague) {
			usaColleague.noticeMessage(msg);
			return;
		}

	}

}

/**
 * 无须知道各个国家,通过联合国来通信
 * @author Seven
 *
 */
public abstract class Colleague {

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


public class ChinaColleague  extends Colleague{

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

	public void sendMessage(String msg) {
		mediator.sendMessage(msg,this);
	}
	
	public void noticeMessage(String msg) {
		System.out.println("中国收到消息:"+msg);
	}
}


public class UsaColleague  extends Colleague{

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

	public void sendMessage(String msg) {
		mediator.sendMessage(msg,this);
	}
	
	public void noticeMessage(String msg) {
		System.out.println("美国收到消息:"+msg);
	}
}

测试:

public class Client {

	public static void main(String[] args) {
		
		
		ConcreteMediator mediator=new ConcreteMediator(); //联合国的创建
		
		ChinaColleague chinaColleague=new ChinaColleague(mediator); //让中国知道联合国
		UsaColleague usaColleague=new UsaColleague(mediator);//让美国知道联合国
		
		mediator.chinaColleague=chinaColleague; //中国加入联合国
		mediator.usaColleague=usaColleague;//美国加入联合国
		
		usaColleague.sendMessage("贸易战搞起来?"); //美国通过联合国向中国发声
		chinaColleague.sendMessage("搞你妹啊,现在和平年代,和气生财!"); //中国通过联合国向美国回应
		
		
	}
}

打印结果
中国收到消息:贸易战搞起来?
美国收到消息:搞你妹啊,现在和平年代,和气生财!

三.小结

作为一种行为性设计模式,它的优点有: 1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则(最少知道原则)。 缺点:中介者会庞大,变得复杂难以维护。
如果你觉得本文对你理解设计模式有丁点作用,欢迎点赞和评论,如果觉得写得不好,欢迎您在下方吐槽。

相关标签: 中介者模式