设计模式之中介者模式
程序员文章站
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、符合迪米特原则(最少知道原则)。 缺点:中介者会庞大,变得复杂难以维护。
如果你觉得本文对你理解设计模式有丁点作用,欢迎点赞和评论,如果觉得写得不好,欢迎您在下方吐槽。
上一篇: 动画:一篇文章快速学会桶排序
下一篇: Ubuntu下安装gitlab