设计模式-中介者模式
中介模式的思想就像生活中各种各样的中介机构。比如房地产中介,它能解决租客与房东之间的租赁需求,能够解决购房者和卖房者之间的交易需求。可以想象一下,如果没有这类中介,那么“卖方”是不是要天天跑出去问别人要不要买房子,而想要“购房”的人不得天天跑出去找房子买。如果没有中介,多个对象之间的通信容易形成复杂的网状结构。
介绍
中介者模式:定义一个中介对象来封装一些列对象之间的交互,使原有的对象之间松耦合,各个对象之间不需要显示的相互引用(直接通信),而且可以独立地改变他们之间的交互。中介者模式又叫做调停模式,它是迪米特法则的典型应用。
优点与缺点
中介者是一种对象行为模式,具有如下的优缺点。先说优点 1.降低了对象之间的耦合度,使得原本需要直接通信的对象通过中介者进行间接通信(迪米特法则的体现),对象容易复用 2.将对象间的一对多关联转变成一对一关联,被调停的对象仅仅与中介者交互,提高系统的灵活性,使得系统易于扩展。(如果没有中介,卖房子的人要天天跑出去问N个人是否需要购房,这就是形成一对多关联了)
缺点。凡是迪米特法则的典例都会有一个最重要的缺点(也是迪米特法则带来的副作用)。当同事类(原本需要直接交互的一系列对象)过多的时候,容易使得中介者的职责膨胀,从而使得系统复杂度上升,不易于维护!
适用的前提
1.当对象之间村内在复杂的网状结构关系而导致依赖关系混乱,系统复杂度高的时候。 2.当想创建一个运行于多个类之间的对象,又不想生成新的子类时候
成员与结构图
再来看一下类之间的结构关系图
再来回顾一下观察者模式的结构图
有没有发现,中介者模式和观察者模式稍微有点相似!我在学习的时候就一直带着这个问题去思考,于是得出如下几个个人见解。 差异点: 1.强调的侧重点不同,观察者模式也叫做“发布-订阅”模式,强调是的随着主题Subject的变化对观察者的通信。而中介者模式强调的是,同事类之间的交互。这就是为啥我更倾向于称“观察者模式”为发布订阅模式的原因。
DEMO示例
以我们工作中最常见的几个对话为例子!模拟PM和QA和码农在几句对话
运行结果如下:
Process finished with exit code 0
总结
1.中介者模式是一种行为型设计模式 2.中介者模式解决了复杂的网状通信,改而使用星型结构 3.中介者模式是迪米特法则的典型应用