一、介绍
1、定义:
将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示
2、主要作用:
在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
用户只需要给出指定复杂对象的类型和内容;
建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
3、 解决的问题
方便用户创建复杂的对象(不需要知道实现过程)
代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)
二、UML类图 & 组成
Builder:建造者接口,定义创建一个Product对象所需的各个部件的操作
ConcreteBuilder:具体的建造者实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时提供一个让用户获取组装完成后的产品对象的方法
Director:指导者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象
Product:产品,表示被生成器构建的复杂对象,包含多个部件。
建造者模式的主要功能是构建复杂的产品,另外这个构建过程是统一的、固定不变的,变化的部分被放到建造者部分了,配置不同的建造者,能构建出不同的产品来。
建造者模式分成两个很重要的部分:
一个部分是Builder接口,这里是定义了如何构建各个部件
另外一个部分是Director,Director是知道如何组合来构建产品的,也就是说Director负责整体的构建算法,而且通常是分步骤来执行的。
三、优点:
松散耦合
可以很容易地改变产品的内部表示
更好的复用性
本质是分离整体构建算法和部件构造
四、应用场景
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
五、相关模式
1、抽象工厂模式
相似点:
目的相同,用于创建复杂对象
不同点:
抽象工厂模式的主要目的是创建产品簇,这个产品簇里面的单个产品就相当于是构成一个复杂对象的部件对象,抽象工厂对象创建完成后就立即返回整个产品簇;而建造者模式的主要目的是按照构造算法,一步一步来构建一个复杂的产品对象,通常要等到整个构建过程结束以后,才会得到最终的产品对象
2、策略模式:
相似点:
支持不同算法
不同算法生成不一样的结果
不同点:
目的不同,建造者模式在于创建对象,策略模式在于描述行为