03 建造者模式
定义:根据相同的物料,组装出不同的生产内容
啰嗦一点的理解:建造者模式也是创建模式的一种,主要目的也是生产产品。不同于其他模式从无到有吭哧吭哧埋头造,建造者模式更像一个组装厂,负责拼接各个部分的半成品,以生成新的产品
示例场景:装修包
装修方案的生成,是一种典型的通过组装材料生产产品的过程,因此可以使用建造者模式对其改造IMatter
:定义装修可能会用到的“半成品”建材,如吊顶、涂料、瓷砖、地板IMenu
:定义装修包,以及装修包的具体加工过程(如何将材料添加进装修包的IMenu appendXXX(IMatter)
)Builder
:定义不同风格装修包的生产方法(真正提暴露给客户的生产方法),通过输入面积直接返回多种风格装修包对象
总结模板:
- 组件类:定义可选的“半成品”材料,这些材料可以用来组装为新产品(这些材料不一定全都需要被使用)
- 组件缝合类(产品组装类):定义组装后的产品,以及该产品的具体加工过程(微观),产品的自身属性等
- 建造类(产品生产类):定义不同产品的生产方法(宏观),直接输出组装好的多种产品
链式编程:
学习过程中发现,使用appendXXX(IMatter matter)
的方法同时返回自身的过程,和lombok
提供的@Builder
注解的作用非常像。链式编程的过程可以通过一行代码,选择性地设置对象属性,比构造器传参和set传参更简洁优雅,是建造者模式的经典体现
实现链式编程的关键,在于定义“组件缝合类”的“缝合方法”时应返回其自身。正因为返回的是自身对象,所以可以重复地调用添加组件的方法,直到添加完毕简单升级改造一下:
原来的appendXXX()
只要入参符合IMatter
就可以顺利被组装进去,可能会存在appendCeiling()
组装涂料的错误,可以通过简单的接口细化做到类型限制