行为型 模式
加入中介,改变结构,提高动态服务的能力。
https://time.geekbang.org/column/article/226710
在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”, 它要求每个对象都必须知道它需要交互的对象。
例如,每个人必须记住他(她)所有朋友的电话; 而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。
如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,
这时只要找一个“中介者”就可以了。
如前面所说的“每个人必须记住所有朋友电话”的问题,
"接线员" 只要在网上建立一个每个朋友都可以访问的“通信录”就解决了。
这样的例子还有很多,例如,你刚刚参加工作想租房,可以找“房屋中介”;
或者,自己刚刚到一个陌生城市找工作,可以找“人才交流中心”帮忙。
这样的例子也很多,例如,在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;
还有大家常用的 QQ 聊天程序的“中介者”是 QQ 服务器。
所有这些,都可以采用“中介者模式”来实现,它将大大降低对象之间的耦合性,提高系统的灵活性。
中介者模式封装对象之间互交,使依赖变的简单,并且使复杂互交简单化,封装在中介者中。
例子中的中介者使用单例模式生成中介者。
中介者的change使用switch判断类型。
从代码中我们可以看出,原本业务逻辑会分散在各个控件中,现在都集中到了中介类中。实际上,这样做既有好处,也有坏处。好处是简化了控件之间的交互,坏处是中介类有可能会变成大而复杂的“上帝类”(God Class)。所以,在使用中介模式的时候,我们要根据实际的情况,平衡对象之间交互的复杂度和中介类本身的复杂度。
而中介模式正好相反。只有当参与者之间的交互关系错综复杂,维护成本很高的时候,我们才考虑使用中介模式