三、Builder 生成器模式(创建型)
1、意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
2、场景:在电脑城装机总有这样的经历。我们到了店里,先会有一个销售人员来询问你希望装的机器是怎么样的配置,他会给你一些建议,最终会形成一张装机单。和客户确定了装机配置以后,他会把
这张单字交给提货的人,由他来准备这些配件,准备完成后交给装机技术人员。技术人员会把这些配件装成一个整机交给客户。
不管是什么电脑,它总是由CPU、内存、主板、硬盘以及显卡等部件构成的,并且装机的过程总是固定的:
-- 把主板固定在机箱中
-- 把CPU安装到主板上
-- 把内存安装到主板上
-- 把硬盘连接到主板上
-- 把显卡安装到主板上
但是,每台兼容机的部件都各不相同的,有些配置高一点,有些配置低一点,这是变化点。对于装机技术人员来说,他不需要考虑这些配件从哪里来的,他只需要把他们组装在一起了,这是稳定的装机
流程。要把这种变化的配件和稳定的流程进行分离就需要引入Builder模式。
示例代码
5、何时采用
-- 从代码角度来说, 如果你希望分离复杂类型构建规则和类型内部组成,或者希望把相同的构建过程用于构建不同类型的时候可以考虑使用建造者模式。
-- 从应用角度来说, 如果你希望解耦产品的创建过程和产品的具体配件,或者你希望为所有产品的创建复用一套稳定并且复杂的逻辑的时候可以考虑使用建造者模式。
6、实现要点
-- 对象的构建过程由指导者完成,具体的组成由具体建造者完成,表示与构建分离。
-- 建造者和指导者是建造者模式的关键点,如果进行合并或省略就可能会转变到模版方法模式。
-- 如果对象的建造步骤是简单的,并且产品拥有一致的接口可以转而使用工厂模式。
7、注意事项
-- 返回产品的方法是否必须,是否一定要在抽象建造者中有接口根据实际情况而定。如果它们有统一的接口可以在抽象建造者中体现这个抽象方法,如果没有统一的接口(比如,生产毫无关联的产品
)则可以在具体建造者中各自实现这个方法,如果创建的产品是一种产品,那么甚至可以省略返回产品的接口(本文的例子就是这样)。
10-31
347
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-16
841
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)