设计模式学习之中介者模式

447 阅读2分钟

UML结构类图的常用画法

简单工厂

设计模式学习之外观模式

设计模式学习之适配器模式

设计模式学习之单例模式

设计模式学习之工厂方法模式

设计模式学习之生成器模式

设计模式学习之原型模式

Demo传送门

先认识一下什么是中介者模式

用一个中介对象来封装一系列的对象交互,中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

如此中介者需要知道所有的对象,其他对象只和中介者交互,而不用彼此交互,就可以解耦对象之间的关系。

案例:

产品提出需求,由开发组进行开发实现。如果没有中介者进行协调,产品在有了新的想法后,还要和开发同事进行沟通,他既要知道后台,也要知道前端,还要知道客户端(ios,android)的具体职能,这样才好对具体的工作进行安排,但是我们显然知道这是不可能的,所以现实中往往有一个项目经理在中间调停,一来是讨论需求,二来是分配需求,确定最后的评估时间。我们就以这个为例来说明一下中介者模式是如何工作的。

  1. 首先来看一些UML结构图

  1. 定义抽象对象类,主要负责约束对象的类型,实现一些具体类之间的公共功能。如图中所示的具体的类都应该知道中介者对象

  1. 各个对象类,实现自己的业务,在需要与其他类通信的时候,就与持有的中介者通信

  1. 中介者接口,定义各个具体类之间交互需要的方法,可以是公共的通信方法

  1. 具体中介者实现:此类需要了解各个具体类,并维护各个对象,负责协调各个对象的交互关系

  1. 客户端引用

  1. 结果

中介者模式优缺点:

优点:

  • 松散耦合
  • 集中控制交互
  • 多对多变成一对多

缺点:

  • 过度集中化,如果对象的交互非常多而且较为复杂,中介者会变得十分复杂,难于管理和维护

中介者适用场景:

  • 如果一组对象之间的通信方式较为复杂,导致相互依赖,结构混乱,可以采用中介者模式,把对象的交互管理起来,各个对象都只需要和中介交互
  • 如果一个对象引用很多的对象,并直接跟对象交互,导致难易复用该对象,可以采用中介者模式,把这个对象跟其他对象的交互封装到中介者中