中介者模式详解(作用优缺及应用场景实例)

中介者模式详解(作用优缺及应用场景实例)-mikechen

中介者模式定义

中介者模式,英文名Mediator Pattern,这种模式提供了一个中介类,来封装一系列对象之间的交互关系,又叫调停模式。

 

中介者模式优缺点

中介者模式的优点

  • 降低程序复杂度:中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖;
  • 解耦 :减少类间的依赖的同时,也降低了类间的耦合;

中介者模式的缺点

  • 系统稳定差:中介者模式这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响;
  • 逻辑复杂:中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,同事类越多,中介者的逻辑就越复杂;

 

中介者模式角色

中介者模式包含以下主要角色,如下图所示:

中介者模式详解(作用优缺及应用场景实例)-mikechen

1.抽象中介者Mediator角色

它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

2.具体中介者Concrete Mediator角色

实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。

3.抽象同事类Colleague角色

定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

4.具体同事类Concrete Colleague角色

是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

 

中介者模式案例

一说到中介,我们自然而然地会想起来“房地产中介”,下面以房产中介为例。

1.定义:抽象同事类

中介者模式详解(作用优缺及应用场景实例)-mikechen

 

2.定义:抽象中介者

中介者模式详解(作用优缺及应用场景实例)-mikechen

 

3.定义:具体中介者

中介者模式详解(作用优缺及应用场景实例)-mikechen

 

4.定义:具体同事类(房主)

中介者模式详解(作用优缺及应用场景实例)-mikechen

 

5.定义:具体同事类(租房者)

中介者模式详解(作用优缺及应用场景实例)-mikechen

 

6.中介者测试

public class MeditorPattern {
public static void main(String[] args) {

    Meditor meditor = new HouseMeditor();

    Person renter = new Renter();
    Person landlord = new Landlord();

    meditor.SetRenter(renter);
    meditor.SetLandlord(landlord);

    renter.SetMeditor(meditor);
    landlord.SetMeditor(meditor);

    renter.SendMessage("我想租套房子!");
    landlord.SendMessage("我要出租房子!");
}
}

运行结果:

房东收到信息:我想租套房子!
租房者收到信息:我要出租房子!

 

中介者模式应用

想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类,可以通过引入中介者类来实现。

典型的中介者模式场景有:

  • 大家生活中最熟悉房产中介就是典型的中介者模式的应用;
  • 电脑主板,电脑的CPU、内存、显卡等配件之间不需要相互交互,通过主板即可,这也是中介者模式的典型应用。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法