中介者模式定义
中介者模式,英文名Mediator Pattern,这种模式提供了一个中介类,来封装一系列对象之间的交互关系,又叫调停模式。
中介者模式优缺点
中介者模式的优点
- 降低程序复杂度:中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖;
- 解耦 :减少类间的依赖的同时,也降低了类间的耦合;
中介者模式的缺点
- 系统稳定差:中介者模式这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响;
- 逻辑复杂:中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,同事类越多,中介者的逻辑就越复杂;
中介者模式角色
中介者模式包含以下主要角色,如下图所示:
1.抽象中介者Mediator角色
它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
2.具体中介者Concrete Mediator角色
实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
3.抽象同事类Colleague角色
定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
4.具体同事类Concrete Colleague角色
是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
中介者模式案例
一说到中介,我们自然而然地会想起来“房地产中介”,下面以房产中介为例。
1.定义:抽象同事类
2.定义:抽象中介者
3.定义:具体中介者
4.定义:具体同事类(房主)
5.定义:具体同事类(租房者)
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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》