00:00
外观模式在my bets框架应用的源码分析,我们来瞅瞅。我在这个MY框架里面的哪个地方找到了。我们的外观模式的应用场景呢?在这里my Betty是有一个configuration,通过这个configuration呢,我们可以创建这个Meta object OK,那在这里他用到了我们的外观模式。好,同学们,我们来追一下这个源码,追一下这个源码大家就一目了然了,待会呢,我们画一个类图。对吧,我们画一个类图,把它的这个角色分析出来,大家一看就清晰了,来打开它,我们新建一个包,新建一个类。For sad。好,ACA for。那么我们看一下configuration,它是怎么去使用到的呢?来写一个。康。Configuration这样子的吧,Configuration OK啊,那现在我们追一下源码,同学们看,在我们源码里面有这么多的configuration,哪一个是呢?同学们告诉大家是这在。
01:06
I bet里面有个session,里面有个configuration,我们进去追一追。好,同学们,我们可以看到这个类,各位这个类呢,我们先来看一下,这我我讲关键的地方讲哈,同学们大家有没有发现在这里。在这里面有。Reflector factory。有这个工厂,还有对象工厂,还有一个object rapper factory大有没有看到这三个工厂?对象。对不对?好,那么我们再来看,这里面有一个方法叫configuration,我们往下拉。在这里。OK啊。我这追啊,应该是在哪里,我再找一找,不是在这儿。找一下啊,我们找一下这个源代码。找一下这个源代码,Configuration。Configuration。
02:01
哦,不在这里是吧,我往下拉是不是在下面的代码。OK。呃,我看一下这一段。有一个方法是在这里。在哪里呢?在这有一个这样的方法,就是。六对,六一个Meta object在这个地方,好在这个地方,那在这个地方我们去搂一搂,它是在哪里用到了呢?我们再重新打开这个源码,六找一下六那个。词语哈六。六在这好往这注意,同学们看到在这里哈,注意在这里呢,它利用一个Meta object的时候,它调用的是Meta。这个类的一个静态方法for object,他把我们的这三个对象实例传进去了,也就是说大家可以理解成是configuration呢,它是一个外观内,他在这这里面呢,聚合了,呃,聚合了我们三个这样的factory对象实例,那我们注意到这里面去看一下。
03:07
For object,我们追进去好追到这来呢,我们来看这个源码,For object往下拉。各位。在哪里了?点一下哈。点一下这个没有定位的是这。在这同学们看在这里呢,它根据这个object的一个情况。然后呢,调用的是如果object等于空,那走的是代码,如果object不是不不等于空,那么它走的是六一个Meta object,我们再看这里面的代码,就是这个是这个肯定是他的一个构造器了,我们注意到这个构造器来。定义定位一下啊,这还不能这样,直接定位直接看这就行了。大家可以看到在这里呢,上边我们看这段代码,好,同学们看。跟着老师思路简单的走一走,大家有有发现他把传进来的这几个参数分别付给了本身的这几个属性,就是它这个对象里面的属性,OK,然后呢,大家看到这里面有。
04:08
一个if else分支,看到没有?那大家有没有发现他根据这个object的情况不一样,它调用的是不同的方法,你比如说object instance of object rapper,如果是这样的话呢,他就直接把这个object进行一个强转返回去了,那如果说他是这样一个情满足这样一个情况,那么他调用的是哪个呢?Object rapper bay去获取一个rapper。哦,如果是object是个map,它叫做是这个,如果是是这样子的,它叫这个,OK,也就是说。也也就是说他在这个地方,根据object的情况不同,他使用的是不同的传进来的这个factory。那大家可以想象。如果我们画一个类图来描述它的关系,这个类图应该是什么样子的呢?来,我们还是老规矩,打开我们这一个。呃,我eclipse,我们画一个类图。
05:02
好,这个类图呢,我们取个名字,这个时候我们分析的是外观模式。Facade OK。好,我们来把它们之间的关系简单的捋一捋,从这里我们首先看到呢,有一个类。这个类就是。就是同学们在这地方看到的configuration。就他。OK。好,我们重新注意把这个他们的关系捋一捋啊,同学们啊,把这个。A configu configuration。在这configuration,那么在这个configuration里面呢,我们分析出来他这里面有几个。呃,这个聚合的这个类哪哪几哪几个对象是你呢,我们看一下。分别是这几个往下拉。诶,我们看看在这里是不是。幺。Reflector factory。是不是OK,还有什么呀。
06:01
除了有reflect factory对象实例,还有还有哪个呢?还有object factory的对象实例,也就是说他这里面会用到这个类。还有什么同学们?我们发现呢,还有一个类就是object rapper factory,这个类OK。好的,我们把它放到这来。放在这里。好,我们再确认一下这个室内,我们再确认一下这室类啊,不是不是其他的,我们再看一下这个源码,哦,的确哦,它是个接口,对,你看这面是个接口。对吧,那也就是说他返回去的,他他这诶我们还说到这来,他溜的是一个这样的东西,那么这个depot object这个类应该是实现了这个接口的,我们来追一下。是不是,诶,果然是这样子,对不对,你看这个debt object这个类呢,它实现了object。这个这个接口,所以说如果我们画的再明白一点呢,可以类似于这样一种感觉,好来我们走一走,那这个就应该是接口,不是累了,我们就重新重新来捋一捋好。
07:09
我们直接直接画最核心的好吧,Det object factory好,再来看下边还有一个deat object rapper是不是?OK。这也是一个类,还有什么同学们?还有就是这个。哦,上面还有一个default,诶,我看看是不是少画了一个。好,还有一个default不着急啊,有一个deft reflect factory OK,他们这几个,这前面这几个是接口,是不是前面这个接口。好,那么相当于说我们把这几个类,把这几个类。去干什么呀,去聚合到了,或者叫做组合,我们这应该叫做组合了,组合到这里面去了,是这样子吧,同学们。
08:04
组合到这里面去了。那在这个地方,我们可以认为它就是一个外观内。是不是它就一个外观类,那么它这个外观内,最终它会产生一个这样的对象实例哪里呢?我们保存一下,通过它的一个操作哈,通过他一个操作,它会返回一个Meta object,我们看这个是一个类还是个接口。哦,这是个类没问题,那也就是说在这里呢,他会去引用,他会去依赖。同学们,他会依赖这个。Meta,好不就是说通过configuration的一个方法调用。调用它下面的这个不同的,根据实际情况来调用下面不同的这个对象实例来返回一个Meta object,那我们的客户端在哪里呢?OK,客户端就在这。Client c,那客户端我们会用到它,是不是因为我要去得到一个Meta factory,那我就用到configuration就可以了,所以这样一个关系。
09:06
OK,那同学们。从这里我们可以观察到,这个东西就可以认为是外观内,而下面就是我们外观内所管理的子系统,是这样子吧,同学们,只是这个子系统呢,跟我们写的有点不一样是它们还分别实现了他们接口,也就是说这个家伙。这个类呢,它还实现了这个接口。诶嗨,这个。那个字有点不好写哈。我把这写一下,就是它实现的是object。Object这个接口。是这样子的,同学们,也就它这里还有一个实现的。111个东西,那同样我们可以猜测出来b object rapper factory,那么objectper factory应该也是一个接口,我们查一下。是不是这个也是个接口啊。好,果然也是个借口,好的,我把这个呢也拿过来,好吧,咱们把它画的准确一点。
10:04
OK,那这边呢,实现。那像B的reflector factory的这个reflector factory应该也是一个接口,我们再看一下,稍微看一下。在。这个地方。好看这个是不是给接口。我们,诶这个地方还看不到这个源码啊,这个地方追不到源码。追不到源码,我再看一下这个地方追不到源码,追不到源码就先,那就先暂时这样子了哈,好吧,因为我这不知道为什么看不到源码,那先暂时不去管它了,应该也是一个接口啊,我们可以猜出来应该是个接口。好,我写到这一栏。来,在这里呢,我们写叫做factory。OK啊好,这边呢,也是一个接口的形式来的,好,其实这个地方同学们,至于我们这地方去组合进去的这些个类,它有没有继承这个接口并并不是关键,我们主要是要阐述的是在这个configuration里面,我们是我们有,我们在用的时候会用到多个这样的。
11:16
这样的这个子系统,那么我们configuration呢,就相当于说提供了一个统一方法,就你就直接叫config这个方法就可以了,就说我我我会自动的根据实际情况返回一个Meta factory,说这个反应过来,如果我们做个注释,这个就是我们的外观内。这个就是被。12。啊,外观。诶。这样这样就是这个就是我们的外观内。好,我把它连一下。OK,那下面这些呢,就是我们这个子系统,你可以理解成这就是子系统,子系统类啊,就是子系统。
12:04
哦,子系统类,那哪些是子系统类呢?这些都算是。是不是同学们这些都算是我们仔细同类,那这样就是一一从这里面可以看出来,我们客户端直接用config就可以了,而我们并不关心你下面到底用的是哪些这个工厂类来完成的,因为从我们调用者来看呢,我们只需要去知道这有一个叫做conig的方法就可以了,哪个方法呢,就是同学们刚才老师给你们看的这个方法。对吧,我们只需要知道这个方法就可以了,诶这个方法在这里。对,诶,我看看这个方法在哪啊,我们再注意一下这个方法是六啊对,六别写错了,六一个object object Meta。Object再看一下这个方法在哪六。太多了哈,各位同学太多了,有的时候对这个源码有点累,好可以看到这对吧,那你给我你就掉这好我就用这些个对对象实例,三个对象实例,然后到到到这个Meta里面去,在这个Meta for object里面调它的这个构造器来返回就可以了,所以说从我们这来看呢,我们就统一通过new metal。
13:19
Meta object就完成了,也就是说在这一个外观这内。要这个东西。好在这个地方呢,它提供了一个这样的。对,提供了这样一个东西就OK了。对吧,然后这边他返回的就是我们这边的Meta。Make object,那这样子就看的更清晰了是吧,我这一个方法下面你怎么去处理,就是你的事外观模式就体现出来了,OK,好,同学们,那关于源码的分析呢,老师就说到这里,大家大致应该也能看懂对不对,并不难。好的,那这一讲我们先到这里。
我来说两句