00:00
Java设计模式之中介者模式,我们来看一下。仍然是看一个需求。这个需求呢,是一个。家庭。智呃,智能家庭管理的一个问题。前面我们其实说过一个类似的项目。当时呢,我们是用外观模式来解决的,还记得吧,那现在这个项目呢,我们要求。用什么呀,用我们的中介者模式,也就是现在呢,我们不要用外观这种模式来解决。我们先来看这一个智能家庭项目的需求,说智能家庭呢,包含了各种设备,有闹钟、咖啡机、电视机、窗帘等等。那么当主人要看电视的时候,各个设备可以协同工作。各个设备可以协同工作,现在我们我们不要用外观模式了哈,不要用外观模式,我们用另外一种方式来完成,那么。当主人要看电视的时候呢?这些设备协同工作,自动完成看电视的准备。具体的流程是这样子的,闹铃响起,咖啡机开始做咖啡,窗帘自动落下,电视机开始播放。
01:13
这样一个流程,各位同学。那么我们可以看到,如果说我们用一个客户端直接来调用的话呢,同样涉及到以前分析的问题,就是这个流程。没有调用的一个清晰的城市。而且他不能适应这种流程的一个定制。因此呢,如果用传统方案来设计的话,基本上是这样子的,我这有一个。闹钟,闹钟发出一个消息过后呢,发给我们的咖啡机,咖啡机他得到一个消息说诶,我就要开始准备咖啡了,然后他去通知电视机打开,并且通知什么呢?通知我们这个窗帘。这个降下。所以说这样子的话呢,我们会发现这个子系统,也就是说它的相应的这个设备呢,工作起来比较复杂。
02:07
而我们调用者呢,对于一个普通的调用人员来讲,比如说你把这个系统子系统开发好了,让别的人去调用你这这个系统,他不明白这里面的流程,那调用起来肯定会非常的麻烦。说的这个流程不行,那我再举一个例子。那如果说。呃,举个更更具有代表性的意义,就就说有一个人去租房。对,有个住房,我们画一个示意图来描述一下这个东西。来,我们写一个。都是media。中介者模式叫mid。那现在呢?我画一个类图来描述一个人去租房的流程,大家看会不会显得很麻烦,说有一个客户,比如这是我们的一个客户。对客户,那客户呢,他相中了一套房子,比如说这有一个房子house,现在呢正在出租。
03:09
好,这边呢,有一个房屋的主人,比如说这是什么呢,房东。对吧,我们叫做house。Housemaster。那现在呢,你有你可以这样去租。你干什么呢?你说我去找到这个房子的主人,房子的主人呢,会去说把这个房子租给我。但是事情有时候比较麻烦,就是房子的主人要租给你的时候呢,他突然说,诶,不行,我还得问一下我的wife。于是他要去。跟他的外外进行一个交流,当问到他他的老婆的时候呢,他就说不行,我还得问我的什么呢,还得问我的这个father。对,他还要问他的father。
04:00
哎,他又去问他father去了,Father问完了过后呢,他的父亲又说不行,我还得问什么呢,问另外一个人,比如说问他的,呃,Brother。OK,现在大家可以看到这个流程就比较复杂了。等到这个brother。说OK了,Go呢,他又去用它了,比如说诶,最终这个消息一层层的返回。返回给他,然后housekeeper再把这个信息给他,这个就很麻烦,也还有可能是在这个交流过程中,突然发现brother来跟你进行一个交流,大家可以看到这个流程就显得比较的什么呀。显得比较的麻烦,也就是说你再去,你的目标是去租房子,但是中间这一个调用的过程很麻烦。很麻烦,那怎么办呢?OK,大家可以看到,我们现在只换一种思路。换一种思路怎么样呢?就是客户啊,他不再去直接找我们的房子的主人,他找一个什么呢?他找一个中介。
05:04
Media。我们叫做media。诶,那么这个中,呃,我们就说这个叫中介好吧,中介。那现在这个流程呢,就变成这样子了,我客户直接找中介,中介。跟这些人进进行一个交流,我不管你是brother,最后给中介通知的还是house啊house master给到中介,呃给呃给这个中介说的结果,总而言之,我们让中介各位同学跟也就是我画这条线吧,画一个关联的这条线。中介跟这些成关联,最后这里面的有个结果,由中介把这个结果给我返回来就可以了。哎,就说我依赖你,你把这个结果给我就行了,把这个结果给我,所以说这样子呢,对于我们这个客户而言,我们只需要找到中介。
06:00
至于你在里面怎么去做的好,我不关心。这个就是我们所说的中介者模式。中介的模式,但是有一点哦,同学们。这个中介可是要在里面做协调工作的,不是那么简单的,也就是说我们这个所谓的将这里面的这个子系统的相互的调用关系由中介来维护。那换言之,在这里面他们之间理论收缩也是相互独立的。大家听我说哈。也就是说他们之间呢,也不要相互沟通,你说比如说house那个house master说呃,不好意思,你要去找我的,找我的外部好,那现在呢,我们这个中介这种模式应该准确是这样子的,他跟他去交流。你你我找到这个房东,房东说不好意思,你要去找外,你也别去了,我我来,我来帮你去找这个外说不好意思,你找我father好,这个中介呢,就在这跑腿,他把这几个人的关系搞清楚就行了。
07:00
换言之,就是说他们之间,我们最好不要去让他们交流,再说一遍,就说。就说我们这个系统里边呢,他们之间我们不让他们相互交流,你比如说我找到你的house master master说你要找我的外,然后中介者通过这个介绍去跟他的外交流。如果外说他还要去找他father好中介再去找这个father。如果说找到他的这个发过后,这个他的发说不行不行,你还得找我的兄弟好中介去找这个brother,最后这四个人都同意了,我把这个结果直接返回给客户,那么也就是说他们之间这种调用关系呢,我们尽量不要让他们去玩,因为一旦让他们这个子系统发生这种交互。OK,那这个难度就会变得非常的麻烦,因为一旦让子信度相互去调用,那大家想这个地方就就会提供这个接口,就说它会掉它。甚至这个地方会去调它,然后他有可能去调它,好麻烦了,这事。
08:04
说宗教的模式呢,他利用他的一个比较特殊的身份,来把他的子系统相互的这个关联关系都搞定。这个就是我们所说中介者的模式的一个核心,大家看理解没有?啊,也就是说你至少通过这个画图呢,能够理解它的一个好处,理解它的好处,减少我们子系统之间的一种耦合。好,这个就是我们画的这样一个图,我们接着再来看。那既然说到这里呢,我们刚才已经看到了哈,就是通过这个传统方式的分析,我们可以看到。当各电器对象有多种状态时,相互之间的调用关系会比较复杂。而且各个电信,电信对象之间你中有我,我中有你,不利于松耦合,就是我刚才所说的这个意思,就说你房东他要去说跟他外夫交流,你他去交流那就麻烦了,外又去跟他的父亲去交流,他的交父亲又跟他不二交流,这样呢就会增加什么呢?增加各个电器,或者是叫做子系统的一种。
09:10
耦合耦合,所以说各个电梯之间所传递的信息呢,也容易混乱。那这样子我们这样做,当系统增加一个新的电信的时候呢,流程改变更麻烦是吧,所以说现在呢,我们就推出了什么呀,中介者模式,也就是同学们看到的类似于这样一种模式去解决。清晰。也比较好控制。也比较好控制好,那关于我们这个智能。智能家庭项目的一个传统方案的一个分析,以及我们中介者模式的一个初步认识,就到这里。那下面呢,我们再来看一下中建这种模式的具体含义是什么好?
我来说两句