00:03
中介者模式的基本介绍来看一下,中介者模式呢,叫做media partner,它是用一个中介对象,注意听这句话啊,他用一个中介对象来封装一系列的对对象交互。中介者使各个对象不需要显示的相互调用,这是一个核心。这是一个核心,就是我我来我来进行一个调节。从而使其耦合松散。使其耦合松散,而且可以独立的改变他们之间的交互。那从这个概念里面,你你们可以明显的感觉到中介者模式,它能够降低我们子系统的耦合性。是不是这样子的?那么中介者模式呢?它是属于行为型模式,让我们代码易于维护,这个中介者模式呢,在我们开发中其实是有应用场景的,你比如说同学们应该听过MVC这个模式,大家还记不记得MVC里面这个C是control,而M呢是model v是view,如果我们画一个示意图的话,大概是这样子的,来体验一下。
01:11
就是。我们这儿有一个view。View类,那么V类呢,他往往会得到数据,得到数据以后,他把这个数据提交给我们的control。是不是提交给control,那control呢,往往会去调用一个model。是这样子的吧,它会调用一个model,调用完model过后呢,Model会返回一个结果或者是一个数据。然后control呢,拿到这个结果,根据这个结果再跟根据这个结果再去显示另外一个view。大家有没有发现,大家有没有发现,你们有没有发现,Control在这个中间就起到了一个中介者的作用。而且大家也知道我们这个control呢,他可能在这个过程中啊,在个过程中。
02:08
他可能调的是多个model。是不是他可能叫做多个model?甚至我们这个model下面。这个图画的有点不好不好了,甚至这个model下面呢,还有类。比如说。好,我们这个往下。挪一下。比如说这个model的下面呢,还有DA。是有这种可能性吧,也就是说其实下面这个子系统呢,它的调用关系还是比较复杂,对我来说,我用control来把它们之间的关系。整合一下就行了,Model和model之间呢,我我就不要不要让他去相互的交互了。那同学们可以看到,在这里view和model之间。这个controller就充当了一个中介。有点类似于一个中介的这么一个感受哈,这么一种特点在这里用到了,那现在呢,呃,我们基本建设说完了过后,我们来画一个中介者模式的原理类图,加深对它的认识,来吧,同学们,我们画一个图。
03:15
来说一下它的原理。同样,我们新建1CLASS。好,我们说一下它的原理。Zero。保存一下,然后呢,现在这做一个保存。对,就做一个保存,那么我们看看在一个标准的中介者模式里面,他应该有哪些角色,首先同学们可以看到,首先有一个中介者。Media。OK,这是有个中介者,那中介者下面呢,将会有什么呢?有具体的一个时间内concrete。Concrete media。Media。好,他显然是要去继承他的,这这个往往是一个抽象类。
04:04
要去要要去继承它,然后呢,我们同学们还有一个抽象的是什么呢。College。College同事类,这个是同事类,那么同事类下面呢,仍然会有具体的一个同实现的同事类。College,我们叫。叫concer什么呀?EAGUE。好,那同样他呢,也会去继承他。好的,同学们。你们注意,这两者从目前看好像没有关系,但是我要告诉大家。这个中介者呢,因为这个中介者他是要去帮我们协调,这个college就是我们认为是同事啊,这个这个有术语叫同事类,这是同事类,那么他们之间会有一个什么关系呢?关联的关系就是media,这个中介者会有college college里面会有media。
05:05
这个关系有点复杂哈,那大家想一想,你。你既然你你将来既然这个具体的一个media要去管理我们的college,所以说这个地方呢,会聚合。八。以接口的形式把college聚合到这里面,它是怎么聚合呢?这里面会有一个集合。好,注意听,这边往往会有一个集合,比如说我们有这个college都放到这里面去了。E gus显然是个集合,那假如我们现在用的是哈希map来管理的。那大家有没有发现,从这里看,我们一个具体的中介者里面,他管理了你所有的college,也就是当然我这写的是quality,其实是它的子类,也就是说它下面所有的这个子类呢,都有可能通过一个集合管理起来。
06:00
在这里这个地方同学们一个关键的地方啊,这个地方它会进行一个管理,我写一个注释。就是这个,我们可以看到concrete。Concrete media,这个是一个具体的中介。中介类。它的功能是干什么呢?它会维护或者他是呃管理哦,这样写吧,他会管理所有的所有的同事。类同事子类,那同事类吧,然后呢,完成就是管理他完成相应的。对相应的操作。和和这个和这个任务。那同学们可以看到,通过老师这一方分析呢,大体大家明白了,说白了就是说。在我们这个具体的concrete media里面,他会把所有的同事类都以一个集合的方式管理起来,然后这里面呢,他会完成相应的操作,比如说你要去租房,或者说你要发一个消息,怎么怎么操作,我在这里面全部给你搞定。
07:06
大家看到没有?那你那当然有,有些同学老师,那这有一个具体的concrete college,还有没有别的,当然有。说这里还有第二个。这有可能有第二个吧,还可能有第三个。以此类推,那我们这里面拥有的所有的这个具体的。这个同事呢,都会被他管理聚合到这里,他在里面进行操作,但是有一点,还有一点最特别重要的,可能同学们要注意好,这地方大家有有点不太容易理解的,就是这个中介者。那么他怎么把自己就是?怎么把自己的一个实力。放入到这个哈希map里面去呢。各位,这个地方中介者模式采取了一种比较有意思的方法,他是这样子的,他在创建自己的时候,创建一个具体的同事类的时候,他就把自己放在了这一个concrete media的这个集合里面去,那这个地方听起来好像有点神奇哈,但是呢,一会大家就可以看到他会用到这个media,也就是说。
08:10
它会怎么样呢?它这里面会有一个我,我举个例子,他在这里面呢,会有一个构造器。OK。诶,这地方怎么写啊,这地方它有这样拷贝一下,它会有一个构造器。哎,这这怎么回事,这个玩意。好,嗯,特麻烦这玩意,因为我粘的这个文字他不认哈,Conor college。E a gue,好。然后一个void。那么。他在这个构造器里面,他会干什么呢?他在构造自己的时候,他会把这个media拿到,然后to这个media呢,调用他的相关的方法,就把它放在了这一个。
09:01
呃,就是他的某一个具体的抽,呃中介类的这个哈希map里面去了。这样的一一个逻辑,当然这边也是一样的。好大体的关系呢,就是这样子,大家看懂了没有,最后我们我们的一个客户端怎么去调用呢?我们的客户端它是这样调用的,它依赖这里。当然我们说依赖media mediator中介者接这个抽象类或者college抽象类,其实主要是指依赖他的会使用到它的子类,是这样子的吗?好,那这样子我们思路大体大体明白了,我们现在呢,给他做几点说明,我们对他做几点说明来整理到这里来。待会儿呢,我们把这个文字整理整理到哈,呃,对原理类图的说明及中介者模式和角色职责的一个阐述。好,我放这来,呃,那么我们捋了捋这个思路,就照着这个图来看第一个。
10:01
这这个地方因为有有点理论化,大家可能有点听的不太明白,待会呢我们写案例,这个mediator呢,就是抽象中介者。OK,注意它定义了什么呢?定义了同事对象。对同事对象到中介者对象的接口。好,我往这边再发一下,在这边拉一下啊,这这是第一句话,大家要有印象的。第二个我们来看一下同学们看到这么一个college。A college这个是什么呢?它是一个抽象同事类,说的再直接一点,就是后边我们要去管理的子系统的负类。比如说电器呀,或者是一些具体的人呐等等,好,我们再来看一个concrete。Concrete Co eag,这个是什么呢?是一个具体的中介者对象,诶,我们先说这个吧。
11:06
Me?Mediaor是一个具体的中介者对象。那他干什么呢?他实现抽象方法,哪个抽象方法这里面media mediaor里面肯定很很多抽象方法,对他实现这个抽象方法,他需要干什么呢?注意听啊,他需要他需要知道。他需要知道这句话很关键,他需要知道所有的这句话啊,他需要知道有的什么呀,具体的同事类。也就是说,他会干什么。他会以一个集合来管理他,即。及。一一个集合一般呢,这样是啊。集合。集合来管理我们,往往我待会在代码里面用的是哈希map来管理的。
12:01
并干什么,并接收,接收某个同事、某个同事对象的消息。这样消息向呃,完成相应的任务,完成相应的任务。OK,听起来有点抽象对不对?还有最后一句话,这句话讲完我们就可以走代码了,Concrete。Concrete什么呢?就是那个college。这个是一个具体的什么呀,同事类,但是他他具体的同事类会有很多啊。就说不会只有一个,不会只有具体的同事类会有很多会有。交易。会有很多。会有很多,那么他什么干什么,每个每个同事,每个同事只知道注意听这句话,只知道自己的。自己的这个行为。
13:02
他只是知道自己的行为,而不了解。而不了解什么呀,而不了解其他同事类的。情况或者叫行为,行为就是我们所说的方法。他们之间没有关联。哦,OK,但是但是注意进度啊,但是但是他们呢,都都含有,或者是会依赖,依赖谁呢?依赖我们的中介者对象,这句话说的非常的到位,中介中介中介。则对象,那通过这个文字的描述,大家大致应该明白什么意思了,大家有没有看到这个图啊?你们有没有发现老师始终没有在这里画他们的关系,也就是说同事和同事之间质量。独立的。独立的,那么你要干一件什么事情,你发一个消息给我,你这发一个消息,最终呢,是发到了我们这个concrete media这边去,然后他拿到消息过后,干他自己的事情。
14:06
因此,同事之间,他们本身原先可能的一种复杂的调用关系,怎么样被解耦了?放到哪里去了呢?放到这个哥们这来做了。好,这就是他的精髓之处,精髓之处,当然我这样讲可能大家还是不太明白老师在说什么,尽管老师已经讲的很投入了,是吧,我觉得这个挺精妙的,但是呢,大家可能还是不知道老师在说什么,没有关系,下面呢,我们就以中介者。模式的这种方式来解决我们前面提出的智能家庭的项目,好吧,这样子一写,你马上就明白了,这样的同学们。我把刚才这个类图呢,给各位朋友板书到我们的幻灯片这边来。OK,非常简单啊,我把这个图拿过来。放到我们的PPT中。好的,同学们。好,他的一个类图的这个,这说明这几句话呢,我认为也很重要,我把它怎么样也复制过来吧。
15:07
没问题吧,同学们,我把它放到这儿。OK。好,放,这就可以大家一目而了然,稍微的整理一下。好,我把这个笔记稍微整理一把啊,OK。好,然后诶这地方没有写到这个四整过来,然后呢,这边把字给它稍微的整小一点,咱们12。OK。好,然后呢,给它来一个背景色,这样就好看了,诶这个背景色整错了。这个背景色选错了啊,应该是在这加背景色。好的,那加一个灰色吧。这样大家就看的比较清楚了,把这个稍微的整理一下。不着急啊,同学们。好把这个稍微整理一下,好同学们,那关于这个中介者的一个就是类图呢,我们就说到这。
16:03
还是应应该说还是比较,就从这个理论上的理解,还是比较理解好理解的就是这几个类类之间的关系嘛,但是怎怎么用呢,我们马上给大家讲解好,下面呢,我们就准备这个用中介景模式来完成上面案例。
我来说两句