00:00
把建造者模式的注意事项,还有我们讲的内容梳理一下。来看一看吧,同学们建造者模式的注意事项有这么几点,大家要做一个了解哈,那么客户端使用这个程序不不必知道这个产品内部的组成结构,比如说我们在建造的时候,我们只需要调方法就行了,所以说他把产品的创建过程和产品本身解耦。那么第二个,每个具体的建造者都是相对独立的,而与其他的具体建造者无关。那举例来说就是用户使用不同的具体建造者即可得到不同的产品对象是吧?因为他的属性不一样了。啊,可以可以可以更加精细的控制产品的创建过程,为什么在我们这一个是这个这个指挥者里面,我们可以去自己组织建造的流程。第四,一个增加新的具体建设者无需修改原有内库的代码,比如说我们前面是建一个普通房子。建高楼,我现在要建一个。别墅是不是基本上我是,呃,我我这我这地方只要建一个别墅过后,下面代码几乎不需要变化。
01:06
大家有没有发现?所以说它仍然符合这个开辟原则,指挥者针对的是抽象建造者类来编程的。因此它符合这个系统的扩展,大家理解这意思,也就是说假如我们回到这这个类图哈,我们现在有了,有了这个house,有了buildhouse。那现在假如我有另外一个具体建造者,他的流程又不一样,我再加一个类。OK,比如说这个呢,是另外一种方式二。Other。Other,这个house。那么我让这个r house去干什么呀?继承house builder,那同学们想象到写完了过后,其实基本上是无缝接轨,为什么呢?因为我要用的话,我在这个这个地方都不要改变,House director都不需要改变,因为我们这是走到这个抽象类,通过这个抽象类来依赖我们具体的这个建造者的,所以说直接用就行了,也是需要这一改connect直接用就完事了。
02:09
多简单。说这种设计模式的力量就体现出来了,明白我的意思啊,如果你不用这种模式,你还是按以前那个继承,就很麻烦,就很麻烦,OK,好的同学们,那这个地方我们说符合开辟原则,那最后呢,建造者模式所创建的产品一般具有较多的共性,就是这种是需要的,如果他如果产品之间差异性很大,就不适合做使用建造者,比如说你建造的流程,我们建房子。是打地基,然后呢盖墙啊,砌墙,然后是封顶,如果你产品之间差异性太大,那你这个建造纸就不好用了。啊,因此呢,它这个使用范围是要求我们产品差异性不大。OK,下面我就不再一个念了,最后呢,我做一个抽象工厂,模式和建造好像很像,它的区别在什么地方聊一聊。
03:01
那么抽象工厂模式实现对产品家族的一个创建。一个产品家族是这样一些系列产品,具有不同分类维度的产品组合。采用抽象工程模式,不需要关关心构建过程,只关心产品是什么工厂生产即可。而建造者模式,它是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件产生一个新的产品,还是有区别。还是也就说我们抽象工程模式,最终的是这个创建这个产品。而我们这边构建者呢,他是需要一个组装,就是你有一个具体的流程。我还要给你建造呢。对不对,好,所以说这个呢,大家认真去体会,慢慢体会一下他的精髓,同学们,那现在我把建造者模式的内容给大家整理到笔记中梳理一把,我们来看看建造者模式我们是怎么一步一步给大家讲解的,来打开我们的笔记,我们来捋一捋这个思路。
04:02
OK啊,把我们的笔记打开。把我们的笔记打开来捋一捋。那刚才我们讲的建造者模式,我们式怎么样一步一步给大家进行讲解的呢?看一下。好,往下拉。来往下走一个哈,走一个。插入一个分页。我们这边讲的是建造者模式,建。照。者模式,OK。建造者模式。那建造的模式呢?首先我们仍然是通过一个盖房的需求引起大家对。建造者模式的思考是这样子吧,需求具体来说呢,就是我们要盖房子,盖房子有这么几个步骤,对不对?好,这是我们提出的需求,提出需求以后呢,我们就用这种最传统的方式来解决的,是这样的吧,同学们用传统的方式来解决它。
05:02
传统方式,那传统方式我画了类图,也写了代码,那么我们把传统方式的类图拿过来。传统方式的类图其实特别的简单,就是一个什么呀,其实就是一个简单的继承关系就完事了。但是这种这种方式呢。这个产品的耦合性太强,因为他是继承啊,直接继承我们这个房子,对吧,好来看一看。哪里呢,我们这儿写到这儿来就可以。好,这是,那代码在哪里呢?代码就在,我们把核心代码拿过来,因为代码有时候也比较多哈,按顺序来吧,先写了一个up house。没问题吧,先写了一个这样的耗时,好,我们打一个空格,产生一个新的表格,新的一行。啊,这个写完了过后呢,我们在这里建了common house。这里面呢,我们有具体的盖房的一个实现,最后调用者在哪里呢?在里面。是不是在这调用的呀,同学们好,这就OK了,把这个讲完了以后呢,我们提出这种方式它是有问题的,就是我们用传统方法来解决呢,会存在一些问题,就是传统方式。
06:13
传统方式的问题分析是这样子吧,同学们。传统方式的问题分析呢,就是按照这个三个步骤来分析的,说了它的好处。也说了他的不足。最后引出我们的建造者模式。那建造模式引出来过后呢?我们先给各位同学说一下建造者模式的基本介绍。是不是就是建造建造者呢?他是一个怎样的概念?捋到这儿来。建造者模式的基本介绍。我们说有这么。几点需要大家知道两点对吧,捋一捋。哪两点,就这两点。啊,首先呢,建造者模式,它的英文叫builder part。这个要有印象,而且呢,他还有另外一个名称,叫做生成器模式,比如说你在某些书上看到别人写的是生成器模式,你应该知道他说的就是建造者。
07:11
它是属于一个构建模式啊,就是说创建对象的这种模式。好,这是最核心的,那最后呢,我们,呃,我们把这个基本介绍说完了以后,是不是我们就分析了建造者模式存在的四个角色,核心的角色,这个一定要答上来,小心面试官问你,他说你建造者模式核心的四个角色是哪四个,分别完成什么功能?第一个产品,第二个抽象建造者,一般它是一个接口或者是一个抽象类,你比如说在我们盖房子这个项目里面,我们写的就是抽象类,而在JDK的源码里面,他的那个建造者其实是个是个接口是不是啊,还有具体建造者他是实现这个接口或者是继承抽象类。Director呢,他这边组合了,呃,聚合了一个builder,然后呢,用这个builder来完成我们产品的一个制作,好这是建造者的四个模式,最后我们这画了一个图。
08:09
这个图呢,大家要有一个印象,好,就看到这个图呢,能够反应过来他说的。就是我们这一个建造者模式,放这就可以了。没问题啊,同学们紧接着把这个建造完了,过后呢,我们就用建造者模式来解决了盖房子的这个需求,我们来把这个捋捋。二由这个建造者模式来解决,那具体这个流程我们看一下,具体这个流程我们来看一下。好,首先呢,我们画了新的一个类图,这个类图在哪画的,在这画的还有印象吧,这图稍微有点大啊,我把这个图给大家截过来。其实这个图还是很形象的,把建造者模式的核心说出来了。那这个地方代码的实现呢,我哎呀太多了这个。
09:01
的代码时间太多了,呃,我可能没有办法一个一个的拷贝啊,没办法一个个拷贝太多,那怎么办呢?我想这样一个办法好不好,因为代码太多,这个截取起来太费太费大家时间了,这样子我我从这边把这个improve。这个代码给大拿过来就可以了,我在这复制一份。这边不是有所有的代码吗?对不对,我把它打一个压缩包好吧,太多了,这个东西你要一个一个拷,太浪费我们的时间,我直接把它粘到我们笔记这个位置好吗。这个你们要打开的话很简单,双击。OK啊,打开。一定要双击哈,打开这里面就是我们的代码,一个个去看就行了,最后代码不是还要给大家放到文件夹里面吗?就是我最终最后的所有的代码还会统一的放在这个文件夹里面。好吧,同学们不用不用着急这个事儿。好,源码就放到这了,最后呢,我们为了加深大家认识,我们从JDK的源码这个角度来分析了一下。
10:02
建造者模式的使用,从而让大家认识的更清晰。那这里面呢,我们怎么说这个事的呢?OK啊,首先我们提出在JDK里边呢,有一个叫build的,他用到了我们建造的模式,具体来说这个流程分析就在这,我就。源码我就不一个截了,因为这个图其实已经把主要的核心的那个思想已经阐述出来了。最后我们针对这一个源码的。这个建造者模式呢,我们做了什么呀?做了一个角色的分析,就是找到它出现的位置是不是好,这是这块的内容。好,这一方是相当于是第三点。是第三点吗?同学们好,是第三点,然后这边呢,我们还是老规矩,给他来一个不同的标号问号就行,好同学们,那关于我们这一个建造者模式,诶对,后面还有哈,还有建造者模式的几个细节啊,细节也聊了一下。
11:04
细节呢,在哪里,在这个位置是不是,诶我们总结的有大概有七个需要大家知道的。对不对,比如说别人问到你说,诶建造者模式他需要哪些地方注意,比如说别人问你,假如假如有这样一个情况,你适合用建造者模式吗?来看这里我们不是写了一个东西吗。呃,是在这个位置写的,就是如果产品之间它的差异性很大,那你就不要使用建造者了。因为我们接到的模式,它总体的大体的制造流程是相似的,你比如说我们盖房子都是三部曲。只是里面细节不一样嘛,对不对,所以说这个你要根据实际情况来玩,好吧,根据你的实际情况来玩。诶,这个地方怎么整的。好,这边我们再给他编一个号。好,同学们,那关于我们建造者模式的内容就给大家介绍到这里。
我来说两句