设计模式---建造者模式

目录

一、什么是建造者模式

二、建造者模式的结构

三、建造者模式的角色和职责

Builder

ConcreteBuilder

Director

Product

四、建造者模式应用场景

五、代码示例

六、理解生成器模式

生成器模式功能

生成器模式的构成

1.Builder接口部分

2.Director部分

生成器模式的使用

生成器模式的实现

1.生成器的实现

2.指导者的实现

3.指导者和生成器的交互

4.返回装配好的产品的方法

5.关于被构建的产品的接口

生成器模式优缺点

1.产品构建与表现松散耦合

2.容易改变产品的内部表示(新建Builder)

3.更好的复用性

思考生成器模式

本质

何时选用


一、什么是建造者模式

Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。

Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。

二、建造者模式的结构

三、建造者模式的角色和职责

Builder

生成器接口,定义创建一个Product对象所需要的各个部件的操作

ConcreteBuilder

具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法

Director

指导者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象

Product

产品,表示被生成器构建的对象,包含多个部件

四、建造者模式应用场景

- 对象的创建:Builder模式是为对象的创建而设计的模式

- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象

- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

五、代码示例

 

六、理解生成器模式

生成器模式功能

主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在解决一步一步构造复杂对象的问题。

更重要的是,这个构建过程是统一的,固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构造出不同的产品表示来。

生成器模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用,具体的构造实现可以很方便的扩展和切换,从而实现灵活的组合来构造出不同的产品对象。

生成器模式的构成

生成器模式分成很重要的两个部分:

1.Builder接口部分

定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去。

2.Director部分

知道如何组合来构建产品,也就是说负责整体的构建算法,而且通常是分步骤来执行

不管如何变化,Builder模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法。在生成器模式中,强调的是固定整体的构建算法,而灵活扩展和切换部件的具体构造和产品装配的方式。

在Director实现整体构建算法的时候,遇到需要创建和组合具体部件的时候,就会把这些功能委托给Builder去完成。

生成器模式的使用

应用生成器模式的时候,可以让客户端创造Director,在Director里面封装整体构建算法,然后让Director去调用Builder,让Builder来封装具体部件的构建功能。

还有一种就是让客户端和Director融合起来,客户端直接操作Builder。

生成器模式的实现

1.生成器的实现

实际上在Builder接口的实现中,每个部件构建的方法里面,除了部件装配外,也可以实现如何具体的创建各个部件对象,也就是说每个方法都可以有两部分功能,一个是创建部件对象,一个是组装部件。

在构建部件的方法里可以实现选择并创建具体的部件对象,然后再把这个部件对象组装到产品对象中去,这样Builder就可以和工厂结合使用

如果在实现Builder的时候,只有创建对象的功能,而没有组装的功能,那么这个时候的Builder实现就和抽象工厂类似。这种情况下,Builder接口就类似于抽象工厂的接口,Builder具体实现就类似于具体的工厂,而且Builder接口里面定义的创建各个部件的方法也是有关联的,他们是构建一个复杂对象所需要的部件对象。

2.指导者的实现

在生成器模式里面,指导者承担的是整体构建算法部分,是相对不变的部分。因此在实现指导者的时候,把变化的部分分离出去是很重要的。

指导者分离出去的变化的部分,就到了生成器这边,指导者知道整体的构建算法,就是不知道如何具体的创建和装配部件对象。

3.指导者和生成器的交互

在生成器模式里,指导者和生成器的交互,是通过生成器的那些buildPart方法来完成的。指导者通常会实现比较复杂的算法和运算过程,实际中可能有这样的情况:

a.在运行指导者的时候,会按照整体构建算法的步骤进行运算,可能先运行前几步运算,到了某一步骤,需要具体创建某个部件对象了,然后就调用Builder中创建相应部件的方法来创建具体的部件。同时,把前面运算得到的数据传递给Builder,因为在Builder内部实现创建和组装部件的时候,可能会需要这些数据

b.Builder创建完具体的部件对象之后,会把创建好的部件对象返回给指导者,指导者继续后续的算法运算,可能会用到已经创建好的对象

c.如此反复,直到整个构建算法已经完成,那么最终的产品对象也就创建好了。

由此看出,指导者和生成器是需要相互交互的,方式就是通过生成器方法的参数和返回值,来回的传递数据。事实上,指导者是通过委托的方式来把功能交给生成器去完成

4.返回装配好的产品的方法

在标准的生成器模式里,在Builder实现里面会提供一个返回装配好的产品的方法,在Builder接口上是没有的。他考虑的是最终的对象一定要通过部件构建和装配,才算真正构建了,而具体干活的就是这个Builder实现,虽然指导者也参与了,但是指导者是不负责具体的部件创建和组装的,因此客户端是从Builder实现里面获取最终装配好的产品。

5.关于被构建的产品的接口

在使用生成器模式的时候,大多数情况下是不知道最终构建出来的产品是什么样的,所以在标准的生成器模式里,一般是不需要对产品定义抽象接口的,因为最终构造的产品千差万别,给这些产品定义一个公共接口是没有意义的。

生成器模式优缺点

1.产品构建与表现松散耦合

2.容易改变产品的内部表示(新建Builder)

3.更好的复用性

思考生成器模式

本质

分离整体的构建算法和部件构造

何时选用

1.创建对象的算法,应该独立于该对象的组成部分以及他们的装配方式

2.同一个构建过程有着不同的表示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值