定义

将一个复杂对象的构建与他的表示分离,似的同样的构建过程可以创建不同的表示

优缺点

优点
将产品本身与产品构建过程解耦,使得相同创建过程可创建不同产品;具体建造者相互独立,扩展容易;可以精确控制产品创建过程
缺点
使用范围受限(要求所创建产品一般具有较多共同点);产品内部变化复杂会导致具体建造者过多

应用场景

要求按照指定的蓝图建造产品,通过组装零配件生产一个新的产品(产品对象具备共性)

角色

  • Product:产品角色,一个具体的产品对象
  • Builder:抽象建造者
  • ConcreteBuilder:具体建造者,构建和转配各个部件
  • Director:指挥者,创建一个复杂的对象

    类图

    image.png

    代码

    ```typescript // 抽象建造者 abstract class Builder { public abstract buildPartA() : void; public abstract buildPartB() : void; public abstract buildPartC() : void; public abstract buildProduct() : Product; }

// 具体建造者 class ConcreteBuilder extends Builder { private product : Product; constructor(product : Product) { super(); this.product = product; }

  1. public buildPartA() : void {}
  2. public buildPartB() : void {}
  3. public buildPartC() : void {}
  4. // 最终组建一个产品
  5. public buildProduct() : Product {
  6. return this.product;
  7. }

}

// 产品角色 class Product { public doSomething() : void { // 独立业务 } }

// 指挥者 class Director { private _builder : Builder; constructor(builder : Builder) { this._builder = builder; }

  1. set builder(builder : Builder) {
  2. this._builder = builder;
  3. }
  4. // 将处理建造的流程交给指挥者
  5. public constructorProduct() {
  6. this._builder.buildPartA();
  7. this._builder.buildPartB();
  8. this._builder.buildPartC();
  9. return this._builder.buildProduct();
  10. }

}

// 使用 const builder : Builder = new ConcreteBuilder(new Product()); const director : Director = new Director(builder); const product : Product = director.constructorProduct(); ```