今天让我们一起来了解一下中介者模式,希望通过本文的讲解大家可以更加深入的理解该模式。
基本介绍
中介者模式属于行为型设计模式的一种。
该模式的核心思想是:通过一个中介类来封装一系列的对象交互,让各对象之间不需要显示的相互引用,从而促使对象间的耦合度降低。
举个栗子
小明想要租房,他比较笨采用最原始的方法走街串巷找寻最合适的房子。
经过一番周转,费了九牛二虎之力租到了合适的房子(不使用中介者模式)。
菜鸟也想要租房子,不过菜鸟聪明啊肯定不会自己瞎转,直接找到了中介。
通过中介,轻松搞定租房问题。这就是中介者模式的体现,中介类负责封装其它类,并与其进行交互。
中介者模式UML类图
UML类图讲解
Mediator:抽象中介者,定义了注册同事对象和与同事对象交互的方法。
ConcreteMediator:具体中介者,实现了抽象中介者中定义的方法。定义了集合用于管理同事对象。
Colleague:抽象同事类,聚合了抽象中介者对象。定义了所有具体同事类所需的公共方法。
ConcreteColleagueA/B:具体同事类,实现了抽象类中定义的方法。
案例讲解
案例:通过找中介租房的例子来讲解一下中介者模式。
房主 => 对应抽象同事类
public abstract class Homeowner {
// 聚合中介者
private Mediator mediator;
public Homeowner(Mediator mediator) {
this.mediator = mediator;
}
public abstract void signContract();
public Mediator getMediator() {
return mediator;
}
}
具体同事类
/**
* 地下室
*/
public class BasementHomeowner extends Homeowner {
// 构造方法
public BasementHomeowner(Mediator mediator) {
super(mediator);
this.getMediator().Register("地下室", this);
}
@Override
public void signContract() {
System.out.println("欢迎入住地下室,每月仅需500元!");
}
}
/**
* 别墅
*/
public class VillaHomeowner extends Homeowner {
public VillaHomeowner(Mediator mediator) {
super(mediator);
this.getMediator().Register("别墅", this);
}
@Override
public void signContract() {
System.out.println("欢迎入住豪华别墅,每月只要5000元!");
}
}
抽象中介者
public interface Mediator {
// 注册同事对象
void Register(String name, Homeowner homeowner);
// 接收消息
void receiveMessage(int price);
}
具体中介者
public class ConcreteMediator implements Mediator {
private HashMap<String, Homeowner> homeownerMap;
public ConcreteMediator() {
this.homeownerMap = new HashMap<>();
}
@Override
public void Register(String name, Homeowner homeowner) {
homeownerMap.put(name, homeowner);
}
@Override
public void receiveMessage(int price) {
switch (price) {
case 500:
homeownerMap.get("地下室").signContract();
break;
case 5000:
homeownerMap.get("别墅").signContract();
break;
default:
System.out.println("没有你想要的房源,去别家看看吧!");
break;
}
}
}
客户端测试类
public class Client {
public static void main(String[] args) {
// 创建中介者
ConcreteMediator concreteMediator = new ConcreteMediator();
// 创建具体房主
BasementHomeowner basementHomeowner = new BasementHomeowner(concreteMediator);
VillaHomeowner villaHomeowner = new VillaHomeowner(concreteMediator);
concreteMediator.receiveMessage(5000);
}
}
执行结果
总结
1、使用中介者模式可以将类之间多对多的关系转变成一对多的关系,降低类的复杂度。
2、中介者模式可以减少类之间的依赖、降低耦合度。
3、中介者类在该模式中承担的责任比较多,一旦出错整个系统都会受到影响。
4、中介者类会随着同事类的增多和业务的复杂而变得庞大,从而提升维护的难度。
今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。