Skip to content

Files

Latest commit

Dec 4, 2023
c4c7d7f · Dec 4, 2023

History

History

08_mediator

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Dec 4, 2023
Dec 4, 2023
Mar 24, 2016

中介者模式

行为型 模式

加入中介,改变结构,提高动态服务的能力。

https://time.geekbang.org/column/article/226710

intro

在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”, 它要求每个对象都必须知道它需要交互的对象。

例如,每个人必须记住他(她)所有朋友的电话; 而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。

如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,

这时只要找一个“中介者”就可以了。

如前面所说的“每个人必须记住所有朋友电话”的问题,

"接线员" 只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。

这样的例子还有很多,例如,你刚刚参加工作想租房,可以找“房屋中介”;

或者,自己刚刚到一个陌生城市找工作,可以找“人才交流中心”帮忙。

在软件的开发过程中,

这样的例子也很多,例如,在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;

还有大家常用的 QQ 聊天程序的“中介者”是 QQ 服务器。

所有这些,都可以采用“中介者模式”来实现,它将大大降低对象之间的耦合性,提高系统的灵活性。

more

中介者模式封装对象之间互交,使依赖变的简单,并且使复杂互交简单化,封装在中介者中。

例子中的中介者使用单例模式生成中介者。

中介者的change使用switch判断类型。

从代码中我们可以看出,原本业务逻辑会分散在各个控件中,现在都集中到了中介类中。实际上,这样做既有好处,也有坏处。好处是简化了控件之间的交互,坏处是中介类有可能会变成大而复杂的“上帝类”(God Class)。所以,在使用中介模式的时候,我们要根据实际的情况,平衡对象之间交互的复杂度和中介类本身的复杂度。

而中介模式正好相反。只有当参与者之间的交互关系错综复杂,维护成本很高的时候,我们才考虑使用中介模式