00:02
看一下建造者模式的基本介绍,也就是把建造者模式的概念给大家聊一聊,那建造者模式呢,它是builder pattern,也叫生成器模式,好,这两种叫法大家知道就行了,那一般来讲我们就称之为建造者模式,它属于一种构建模式,也就是说它是一种创建型的模式。那么它可以干什么呢?可以将复杂对象的这一个建造过程抽取出来。啊,那么这个地方抽出来过程,它可能是做成一个抽象类,使这个抽象的过程,过程的不同实现方式可以构造出不同的表现,也就是不同的对象,比如说我这有一个房子,对吧,或者是一个呃,准确的讲是一个build。那这个builder呢,我让下面的具体的这个子类去实现,呃,继承这个builder。那么我造出来的东西就不一样。那建造者模式,它是一步一步建造一个复杂的对象,它允许用户只通过指定复杂的对象的类型和内容就可以构建,而不知道不需要知道具体的细节。
01:13
这有点类似于什么,因为具体的构建细节呢,被我封装起来。有点类似于咱们这样一种感觉,说我们现在呢,要去建造。一辆宝马汽车,那宝马汽车如果我有方向盘,我有轮胎,对不对,我有发动机,我把它组装起来就可以,至于方向盘、轮胎、发动机是怎么做出来的,我们并不关心,因为我们可以让指能具体去实现啊,大致就这样一个意思,那同学们我来看看,我们说一个模式呢,它一定会有核心的角色。他有核心的角色,在建造者模式里面有四个核心的角色,分别是。Product产品。即我们将来一个具体的产品对象,比如说我们前面的就是那个房子,就是我们要建造的产品。
02:03
那么builder他是一个抽象建造者,这个听起来有点不太明白啊,大家听听我说就行了,抽象这个builder呢,他是一个抽象建造者,他是创建一个product对象的各个部件,它指定的一个接口,当然这地方除了是接口呢,也有可能是个抽象类。也可以是个抽象类,同学们都知道接口和抽象类都可以做抽象层,我我们是不是在前面讲过这个事情,同学们在学oo的时候,也应该听老师讲过,接口和抽象类都可以做抽象层,所以说这个build呢,他有些地方可能是做的接口,有些地方做的是抽象类,比如说我在在我们这讲解讲解的时候呢,我就把builder做成做成的是抽象类。OK。那么这个抽象者,抽象建造者,他主要是干什么事呢?他主他是个建造者,他主要是要把这一个建造的流程给他制定出来,但是建造的具体细节他不管。
03:03
再说一遍抽象的建造者,他只需要指定建造一个产品的流程。但建造的具体细节他不管具体细节交给谁呢?交给具体建造者,也叫concrete builder来实现。那比如说我们要建造成一个普通的房子,那么common。House就是一个具体的建造者了,他会干什么呢?这个具体的建造者,他会去继承这个抽象的建造者。OK,那抽签的建造者里面会组合这一个产品。待会儿我们有另外一个图来描述他们之间的关系,所以说图很重要。好的,还有一个叫指挥者,指挥者你可以理解成这样一个概念,说现在我们要去做一件事情,我们有需要一个指挥者去指挥他们,把它协同起来进行工作,就如同我这讲的,构建一个使用builder接口的对象,注意啊,这个builder也可能是个呃,是一个进抽象类,那么它主要是用于创建一个复杂的对象,它的作用主要有两个,就是我们这个指挥者的作用有两个,第一个它隔离了产品与对象产生的过程。
04:15
对,第二个呢,他控制产品对象的生产过程。好了,同学们,建造者模式是建造者模式里面有四个角色,我相信大家这样听完了过后呢,可能听着有点模模糊糊的,诶,这这四个四个这个角色他们之间的关系是什么样子的?因为我们在学一个设计模式,不是说要知道有几个角色,我们更关心的是角色与角色之间的什么样关系,是这样子,那下面呢,看一张类图。看一张原理的图,同学们可以看到。在这里。Product就是我们产品,它是一个类。那么build呢?Builder里面组合了一个product,再说一遍,Builder组合了一个product,那这个product里面有它的属性,那组合进去过后,这个build在这里呢?有些地方是写的接口,有些地方是抽象类,在我这我会用抽象类来完成。
05:12
也就是说在我们这里面呢,我讲的builder是个抽象类,那下面呢,有一个concrete builder,它继承了builder。这是一个具体的建造者,那具体的建造者在我们这里面体现出来是个什么呢?就是具体的房子,比如说他们。Common house。对,比如说high builder。Hi builder,我简写啊,Hi builder。哎,这些呢,就是具体的建造者,那这里还有一个director,就是这是指挥者,这个指挥者大家看这个图形看出来是什么意思,聚合。把builder聚合到我们这个director里面去,然后让这个builder呢,去完成我们的director里面去调用我们build完成一个产产品的具体的一个制作,最后大家看可以看到这里面有个get result。
06:04
这个get result就是会返回我们这个具体的。这个具体的这个建造者对应的那个对象。大家大致明白什么意思吧?好了,那呃,我把这个讲完了以后呢,同学们大体应该就明白了说哦,我们这一个建造者,呃,是一个什么样的什么什么样的概念,其实大家要如果一定要记的话呢,主要是要记这张图。以及这张图里面这四个角色分别代表什么?再简单的说一下,呃,Product就是我们产品。Build是个抽象类,它规定了我们这个产品制作的一个流程。OK,那么它是一个抽象类具体的,下面是具体建造者,这个具体建造者的吗?会继承我们这个build,把里面建造的流程,具体的方法给实现了。OK,那大家看到在director里面呢,我会聚合一个builder,大家可以看到builder是一个抽象类,而我们的concrete builder继承了它,所以说实际上在director里面呢,他其实用的是谁啊,用的是这个。
07:09
Concrete builder这个对象明白吧,但是但是它体现出来好像是放了一个builder进去,因为builder是是他的父类嘛,所以说我的一个子类交给一个负类是可以的,所以说通过这个抽象层,大家可以看到它缓解了这个缓冲,做了一个缓冲。啊,做了一个抽象层出来,做一个缓冲啊,那通过这个build的调用呢,我们就可以拿到一个具体的这样一个对象,就是concrete builder,比如说是普通的房子还是个高楼好,同学们,那关于建造者模式的原理啊,我相信同学们大体就知道了,下面呢,我们会用这个原理图来指导我们。对前面这个传统的方案进行一个改进,OK啊,那这一讲我们先到这里。
我来说两句