1 概念引入
1.1 定义
Builder Patterns, 构造器(建造器)模式,一种创建型设计模式。专注于解耦复杂对象的创建过程,利用组装的概念使得构造器的构造方法得到充分复用。
1.2 意图
Separate the construction of a complex object from its representation so that
the same construction process can create different representations.
将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。
官方的解释往往是言简意赅但是对于初学者却是不友好的,让我们试着分析一下这句表述。
- 之所以称之为复杂对象,是因为复杂对象必然是由多个对象组成的,而构造复杂对象的前提是构造简单对象最终组装他们。
- 什么叫表示(representation),其实他有另外一个更精准的翻译,具象化。程序里的任何对象最终都是要具像化的,也就是利用对象内部的属性转运数据或者方法计算数据。
- 其实任何复杂的代码理论上都可以写在一起,就像复杂对象的具象化和构造过程,我们也可以写在一起,但是肯定有更合适的写法,这便是构造器模式的意图和出发点,即解耦复杂对象的构造过程和表示。
- 具体的过程我们通过场景和UML进行更深入的理解。
2 UML
3 场景描述
构造器模式对应的场景是系统频繁使用简单对象构建复杂对象并且需要具象化的场景,现实世界不乏这样的例子。
3.1 装修方案
购买完毛坯房的无论是寻找装修公司还是自己设计,最终我们都会形成一份装修方案。而一份庞大的装修方案是由若干单元组成的,比如主卧方案、客厅方案、次卧方案、厨房方案等等,而每一份单元方案又是由很多细小方案组成的,比如地板方案、墙面方案等等。
其实在这个过程中有两个值得注意的点:
- 最底层的方案往往是现成的,比如墙面装修,如果你有过经历你就知道有一本墙面装修的册子,上面有很多方案和效果图。大的方案都是通过若干小方案组成的。
- 装修方案往往需要效果图,而更改任何一个小方案都会对效果图产生影响,往往客户会频繁的更换小方案然后预览整体方案。
所以在这个过程中,我们需要频繁的预览和组装若干小方案,类似的这一过程就是典型的构造器模式。
3.2 物料清单
A bill of materials object (BOM), 物料清单。
假如你有幸参与过制造业,你就会知道工程师在开始制作一件产品前的第一件事情是拉取物BOM,然后预览效果。当我们需要更换了BOM中的某个元器件时,我们需要再次预览。 这一过程极其类似于装修方案。 还是两个点:1. 频繁更换的元器件。2. 便随着更换元器件同一份清单会有不同的结果。
4. 总结
理解构造器模式的前提是理解工厂模式,因为构造器模式的根基就是利用builder构造复杂对象。但是构造器模式的精髓是复杂对象的构造和表现的分离。
记住,当我们需要分离表现和复杂对象的构造时,第一反应就是构造器模式。