00:00
啊呃,接下来呢,我们来说一下,呃,Factor病啊呃,这个呢,是我们配置病的另外一种形式啊,就是其实这个SPA里面呢,它提供了两种类型的病,一种呢,就是我们刚才啊,就是到目前为止,我们所讲的这个课程中一直都在使用的病,它叫做普通病啊,就是你直接去写一个类,然后呢,把这个类呢,通过病的方式呢,配置到我们这个port的容器中啊,它就是一个普通的病,而另外一种呢,就是我们现在要讲的factor病,它叫做工厂病。能理解吧,发个病翻译过来就是一个工厂病啊,那么这个工厂病跟这个普通的病有什么区别呢?听我说一下,工厂病跟这个普通病是不同的啊,有什么不同的地方呢?工厂病返回的对象不是你当前这个类的一个实例啊,而是返回的是工厂病的这个get哦,这样的方法,它所返回的一个对象啊,可能说这个呢,大家也理解不了是吧?那么我们就直接来去使用一个具体的例子来给大家去讲解啊。首先如果说你想去写一个工厂B的话,那么我们就要去实现一个接口了,就是这个发B这个接口,因为人家support帮我们提供好了这个接口,然后如果说你想去使用这个功能的话,那么你就要去自己写个类,然后呢,去要实现这个接口,才能去写出一个工长病来。
01:28
好,那么接下来我们就来实现这个过程,呃,回到我们这个开发工具里面,我们就不在D里面去写了啊,我们再去写一个类啊,写一个八,我们叫做com点。艾特硅谷是吧,叫叫什么呀啊叫做追B能看到吧,哎法合病好,现在呢,王小军写出一个工厂病来,那我们就用一个class,比方说呢,我这个工厂病呢,就叫做什么卡发转病。看懂了吧,来什么工厂病啊,Car对象的一个什么工厂病啊,好,把它写好来大家注意,现在的话呢,我们需要做什么事呢?我们需要去实现一个监口,就叫做什么factor b,看明白了吧,而且这里面的话呢,我们可以去指定一个泛型,那么这个泛型呢?呃,你指定上以后呢,就是将来你这个工厂病要创建什么具体的病对象呢?那你就在这个位置去指定一下,那么从名字上大家应该能感受出来,我是不是去创建一个看对项啊,对吧,所是这个位置呢,我就直接指定成一个卡理解吧,来找一个BY啊呃,那我还是依旧去使用这个Di里面的这个卡吧,我就不再去写了,好吧,啊,我就不用再去写一个卡对象出来了,我就直接使用Di里面的这个卡啊,那么实现了这个监控以后呢,它里面有三个方法是你必须要去实现的,哎,就是我们现在看到的这三个方法。
02:56
分别是什么意思呢?解释一下啊,我们先来说呃,下面的这两个比较好理解,上面的这个是比较重要的,一会来给大家去解释啊,首先这个方法呢,是来返回一个object这的一个ta啊,它是干嘛的呢?它是来什么返回我们具体的B对象的一个什么类型,好就是返回具体的病对象的类型,就是我当前我这个工厂B,我要帮你创建什么病对象呢?那你就把这个B对象的类型给它返回回去,那现在我很明显要创建一个卡对象吧,就是这个位置的话,你就可以写一个什么直接简简单一点啊,就写个卡点class这就可以了,明白白了吧。哎,下面的话呢,我们有一个,哎,你这个班病它是不是单立的啊,这个地方的话呢,呃,需要给大家去解释一下,就是我们这个B的啊,可以是单立的,也可以是啊可以是单立的,单立大家应该都知道吧。
03:56
哎,也可以是圆形的啊,圆形的话呢,也就是我们的非单例啊,啊这个话题的话呢,大家现在先啊知道一下,等我们后面讲这个B的作用率的时候,我们会具体来说这个话题的啊现在你就知道一下,那基本上的话,因为默认情况下,它其实就是一个单立的啊,所以说我们就直接给你远程一个出版,告诉他它其实就是一个单立的就行了啊对于我们现在来讲,你远程和处远程和force没啥区别,明白了吧?啊,没啥区别的啊好,那现在呢,我就人称一个to,先把这个方法来给它写出来,然后具体这个be什么是单立的,什么是原形的,我们再等到后面讲这个啊,后面就是我们啊给大家说一下啊,这个后面我们讲啊讲这个B的作用域啊,再来研究啊,再研究,听懂了吧,来到时候再来研究了啊,啊这两个方法就说完了,说完以后呢,我们来看一下这个方法这个。
04:57
Get object的方法是特别重要的,这个方法才是我们注意了啊,就是工厂病啊,具体创建的并对象是由什么呀,是由我们的get啊这样的方法。
05:17
来返回的理解了吗?也就意味着你不是一个工厂病吗?那么其实我们提到工厂,我们首先要想到的就是他肯定要帮我去创建一个并对项,那么这个并对项到底是怎么创建出来的呢?就是由这个get of这样的方法来帮我们返回回来的,那么也就意味着我们可以在这个get哦这的方法里面呢,去返回你具体想要创建的这一个对象啊,比如说呢,我就简单一点哈,这个位置的话呢,我就用一个什么呀,抗项吧,然后用看项的时候呢,我们可以用到它里面的一个构造器啊,比如说呢,呃,就这个构造器吧,好吧,我们来写,随便写一写啊,比如说再写一个啊我们的这个还有嗨,还有啥车啊啊神特是吧啊,那叫五林是吧啊五菱光是吧啊啊。
06:17
啊什什么厂商的啊,就五零嘛是吧,好价格的价格很美好是吧,啊,我觉得就差不多了吧,贵了贵了啊行吧,就这个了哈,价格很美丽哈,神车啊,然后呢,我们来看一下啊啊那么把这个写好以后,大家注意现在我这个盖上好这的方法,因为我加了泛型以后呢,它这个自动帮我们生成了以后呢,它的返回值就是一个卡,如果说你不加唤醒的话呢,它的返回值就不是一个具体的类型了,能明白吧,OK,好,现在我就把它写好了,那么写好以后呢,可能到现在为止大家还不知道它到底是做什么用的好,那么接下来我给他做一个配置。
07:02
那么在src下面呢,我再去写一个那配置文件啊,我们就叫什么spring减发病吧调查秒好我又写了一个这个配置文件,那么这里面的话呢,我们就通过什么呀,来通过我们的工厂病,那通过我们的工厂病来去配置我们的这个啊,通过我们叫做直接写这个factory病吧factory b啊来配置一个一个B,那么这个怎么配置呢?大家注意我们依旧使用的是BID呢,这个你可以随便写啊,比如说我还是创建看项,那我就写一个卡,但是大家注意了,这个class我写什么呀,Class写什么呀,注意class写的就是你的卡病,好现在我们就可以来研究一个问题了,如果说我不告诉你这个家伙是一个工厂病。
08:02
你第一眼看到这个配置以后,你是不是认为将来我这个病是要返回一个看factor病类型的一个对象吧,是不是,因为到目前为止我们都是这么来理解的嘛,都是我第一天第一堂课给大家讲的就是class里面指定的是一个全类名,那么这个全类名干什么用呢?我要通过反射的方式去创建它这个类型的一个对象,然后呢,给你返回回去。对吧,所以说呢,我们第一眼直接看到它的时候呢,我认为就应该是要创建这样类型的一个对象给我返还回来,但其实不是的,为什么呢?因为我们看上去这好像也是一个普通的类,我们自己写的吧,但是surprise不会把它当成一个普通的类,为什么呢?诶,因为你实现了人家的一个接口,虽然说他看到这个类对吧,是你自己写的,但是呢,你这个类跟人家是有血缘关系的。对吧,跟point是有血缘关系的,人家有一个factor b这个接口,你就实现了这个接口了,那么point就会认为你就是一个工厂病,而把它当成一个工厂病以后,那么具体我这个病里面到底返回什么对象呢?就是工厂病里面get object里面返回的对象,你这个方法返回什么对象,我的这个病返回的就是什么对象,能明白了吗?所以说大家一定要记住啊,工厂病就是这个翻砖病,好,具体返回的这个对象是什么呀?诶是由这个get object方法来决定的。好,那么说了这么多了,我们先来做一个测试,来看看这个效果啊,好,那我就在我的这个factor b下面呢,我去一个。
09:59
拉吧,呃,因为我们只会测试一次啊,我就不再去写那个九了,我们就简单一点使用我们的满方法来测了啊好,首先呢,我们再去实例化一下这个容器。
10:16
好,Application contact CTS等于有一个class pass ma application contact啊,我们读的配置文件是。发B点强妙吧,对吧,把它读进来,那么读进来以后呢,大家注意了啊,现在的话我们要做什么事啊,就是CTS要get b好呃,ID值叫什么呀,是不是还是叫这个car啊对吧?所以这句话我依旧写的是我要获取的这个B的ID呢,就是一个car,那么现在我是知道的,他最终要给我返回一个看类型的对象吧,是不是因为我在盖章啊,这里面就是这么去写的啊,然后呢,他给我拿到一个卡对象,你把这个导个包。好导的是我们这个,呃,Di里面的这个卡看清楚了哈,最后呢,我们来C输出一下这个卡,好大家来看一下这个效果。
11:07
啊,你看一下是不是给我们拿到了,就是我们干在这里面那个对象啊,看到了吗?哎,所以说呢,大家注意了啊,这就是我们的一个工厂病,工厂病怎么去理解呢?就是它其实是一个工厂,这个工厂呢,会为你创建出一个病对象来。听懂了吧,也就意味着现在我们的这种配置方式呢,是通过一个工厂来进行配置的,你实际上指向的是一个工厂,那么具体这个病到底拿到一个什么对象呢?是由这个工厂里面的谁呀,Get of这样的方法来决定的,明白了吧?这个会用了吗?会用了吧?OK,那么会用了以后呢,我再来给大家去做一点点的扩展啊,那你说为什么要帮我们提供这个东西啊。就从这个最后拿到卡对象的这种方式来讲,我其实还是觉得以前那个方式比较简单,因为你使用工厂币,你起码你还得去写一个类,你还得去实现一个接口,最后呢,你在这里面还得去扭出一个对象来,是比较麻烦啊,对吧?但是为什么死工会帮我们提供一个工厂命呢?
12:18
注意,这是支持我们参与到B对象的创建过程中的。一种方式。你想一下,以前我们对象的创建是不是都是死工通过什么呀,无参构造器,或者说什么有参数构造器,是不是直接给你创建出来了,但是现在我们这个对象的创建是不是相当于我们自己去写的了。你看这个对象是我自己创建出来的,是我自己通过代码写的吧,也就意味着point呢,通过这个工厂病的方式呢,他让我们参与到了这个具体这个并对项的一个创建过程中,也就意味着你的这个并对项,你想怎么进行创建,那么你就在这个get着而不的方法里面去写就行了,你想进行哪些判断,你想进行哪些处理,你都可以在这里面去写。
13:04
所以说呢,就是他支持我们去参与到这个病列上的这个创建过程中,就是通过这个工厂病来去做的,好,这是其中的一个啊,再一个需要给他去说一下这个工厂病呢,我们今天讲完以后,可能我也不会自己再去写了,理解吧,在后续的课程中,可能我都不会自己再去写一个共产命了,但是大家一定要注意,讲它呢,还是有原因的,就是以后我们再去使用这个support的时候,我们会用到它里面的一些,就是提前已经写好的一些类,那么那些类呢,我们会用到一些工厂病。就是人家会使用这个工厂币帮我们提供好一些东西,我们就会去用它,以及我们将来再去整合的时候,比如说我们想通过这个point去整合一个买这个框架,那么我们在整合的时候呢,我们也会用到一些人家已经写好的工厂病。理解了吧,所以说讲这个最主要的一个目的呢?啊,第一个当然我得教会你怎么去用它,第二个还有一个目的就是什么呀,当我们在遇到一个工厂病的时候,我们必须得认识,并且我们必须得知道它里面是怎么帮我们创建对象的,听明白了吗?其实就一句话,你就记住,看到工厂病你就想到get off这样的方法,听懂了吗?诶,看到factor b,你就要想到get off这样的方法。
14:25
理解这个意思了吧,好,那么这就是要给大家去讲解的一个工厂病啊,就是我们的反病。
我来说两句