建造者模式(Builder Pattern)

一、概念

建造者模式(Builder Pattern)也叫 “生成器模式”,”对象构建时非常复杂,且有很多步骤需要处理时,可以使用多个简单的对象一步一步组装成这个复杂对象

建造模式的本质:

  1. 分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用
  2. 由于实现了构建和装配的解耦不同的构建器,相同的装配,也可以做出不同的对象; 相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建逻辑、装配逻辑的解耦,实现了更好的复用

二、参与者

  1. 产品(Product):表示被构造的复杂对象
  2. 抽象建造者(Builder):建造者的抽象类,规范产品对象的各个组成部分的建造,一般由子类实现具体建造过程。创造Product各个部件的抽象接口
  3. 具体建造者(ConcreteBuilder):具体的建造者,根据不同的业务逻辑,具体到各个对象的各个组成部分的建造。创造Product各个部件的具体实现接口
  4. 建造指挥者(Director):调用具体的建造者来创建各个对象的各个部分,然后根据不同组合封装起一个个方法供外界调用。该类引导Builder来实现一个产品构造的成体流程

三、代码例子

指导者 指导 造 BMW的引擎、变速箱、底盘

指导者 指导 造 BenZ的Engine、GearBox、Chassis

产品(Product):BMWCar、BenzCar(Car)

抽象建造者(Builder):CarBuilder(BuildCar、BuildEngine、BuildGearBox、BuildChassis)

具体建造者(ConcreteBuilder):BMWCarBuilder  和   BenzCarBuilder   (建造  BuildCar、BuildEngine、BuildGearBox、BuildChassis)

建造指挥者(Director):CarDirector  (调用  BuildCar、BuildEngine、BuildGearBox、BuildChassis)

四、UML图

 

五、核心思想

  1. 将复杂对象的创建过程(比如设置属性值),交给构建者Builder去做
  2. 最后通过构建者的构建方法build(),真正去创建对象。
  3. 构建方法里调用需要实例化的类的构造函数,并将构建者的属性值复制给该对象。复制前可以做一些参数校验默认值赋值等操作。

六、优缺点

(一)优点

  1. 封装性好,创建和使用分离
  2. 扩展性好,建造类之间独立,一定程度上实现了解耦

(二)缺点

  1. 产生多余的Builder对象
  2. 产品内部发生变化时,建造者都需要修改,成本较大

七、建造者模式和工厂模式区别

  1. 建造者模式根据不同的产品零件和顺序可以创造出不同的产品,而工厂模式创建出来的产品都是一样的
    • 构建者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”创建不同的对象。
  2. 建造者模式使用者需要知道这个产品有哪些零件组成,而工厂模式的使用者不需要知道,直接创建就行
  3. 工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象,一般这个创建过程也比较简单,如果复杂的话,可以工厂模式和构建者模式结合。
posted @ 2022-12-05 19:46  ImreW  阅读(17)  评论(0编辑  收藏  举报