在本讲,我们来学习一下行为型模式里面的第七个设计模式,即中介者模式。
概述
在学习中介者模式之前,我们先来看下面这段描述。
一般来说,同事类之间的关系是比较复杂的(其实,这儿所说的同事类就是中介者模式里面的一个角色,而在这里,你可以先把它当作一个普通的类来看待),多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,既不利于类的复用,也不稳定。例如,下图中有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响,因为对象1所属类和对象2、对象4、对象5、对象6所属类之间是有关联关系的。如果对象2发生变化,那么将会有5个对象受到影响。所以,这种错综复杂的关系会让我们在后期维护起来特别特别麻烦,也就是说,同事类之间直接关联的设计是不好的。
那么我们应该如何来改进呢?这时不妨使用一下中介者模式,因为使用中介者模式的话,可以使得同事类之间的关系成为星型的结构,也就是我们下图右侧所展示出来的星型结构。
从上图右侧部分可以看到,每一个同事类,它只和中介者进行一个相互关联,而它们相互之间是不需要进行任何关联的,这样,任何一个类的变动,只会影响到类本身以及中介者,也就是说,对象1所属类里面的业务逻辑发生变化了的话,那么对象1所属类以及中介者要发生一个改变,而对于其他对象的所属类则是不需要进行改动的,这样就减小了系统的耦合。
一个好的设计,必定不会把所有的对象关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为,这个专门的类就是中介者。
下面我再举一个例子让大家好好理解一下。
如果我们攒够首付了,想要去买一套属于自己的房子,那么我们应该怎么办呢?我们作为一个购房者,是不会直接去找对应的房主的,因为房主有很多,我们找起来会非常麻烦,一个一个房主去找,会累坏我们,正确的做法就是去找房屋中介。对于房主而言,他只需要把自己房子的信息交给中介进行管理即可,而对于购房者来说,他只需要去找对应的房屋中介就行,房屋中介会根据他的需求去找对应的房主协商,并给购房者一些比较不错的建议。
如果此时购房者的需求发生了变化,那么他并不需要把他的需求告知给所有的房主,而只需要告知给房屋中介即可,房屋中介会根据他的需求帮他去选择合适的房子,这就是中介者模式。
那什么是中介者模式呢?下面我们来看一下它的概念。
中介者模式又叫调停模式,它定义了一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。
上述中介者模式的概念,大家看着可能挺懵的,这没关系,下面我给大家稍微解释一下。
就拿上述购房者买房的案例来说,房屋中介就是中介者角色,它封装了房主以及购房者之间的交互关系,这样就会使得房主和购房者之间的耦合变得松散,要是没有房屋中介的话,购房者买房就只能去找房主了,一旦看的房子他不满意,他还需要再去找另外一个房主,还不满意的话,还得继续去找其他房主,那么这就非常耗时、耗资源了。
|