03 建造者模式

  • 定义根据相同的物料,组装出不同的生产内容

  • 啰嗦一点的理解:建造者模式也是创建模式的一种,主要目的也是生产产品。不同于其他模式从无到有吭哧吭哧埋头造,建造者模式更像一个组装厂,负责拼接各个部分的半成品,以生成新的产品

  • 示例场景:装修包
    装修方案的生成,是一种典型的通过组装材料生产产品的过程,因此可以使用建造者模式对其改造

    • IMatter:定义装修可能会用到的“半成品”建材,如吊顶、涂料、瓷砖、地板
    • IMenu:定义装修包,以及装修包的具体加工过程(如何将材料添加进装修包的IMenu appendXXX(IMatter)
    • Builder:定义不同风格装修包的生产方法(真正提暴露给客户的生产方法),通过输入面积直接返回多种风格装修包对象

03 建造者模式 - 图1

  • 总结模板

    • 组件类:定义可选的“半成品”材料,这些材料可以用来组装为新产品(这些材料不一定全都需要被使用)
    • 组件缝合类(产品组装类):定义组装后的产品,以及该产品的具体加工过程(微观),产品的自身属性等
    • 建造类(产品生产类):定义不同产品的生产方法(宏观),直接输出组装好的多种产品
  • 链式编程:
    学习过程中发现,使用appendXXX(IMatter matter)的方法同时返回自身的过程,和lombok提供的@Builder注解的作用非常像。链式编程的过程可以通过一行代码,选择性地设置对象属性,比构造器传参和set传参更简洁优雅,是建造者模式的经典体现
    实现链式编程的关键,在于定义“组件缝合类”的“缝合方法”时应返回其自身。正因为返回的是自身对象,所以可以重复地调用添加组件的方法,直到添加完毕

  • 简单升级改造一下:
    原来的appendXXX()只要入参符合IMatter就可以顺利被组装进去,可能会存在appendCeiling()组装涂料的错误,可以通过简单的接口细化做到类型限制
    建造者模式-第 3 页.drawio.png