定义
将一个复杂对象的构建与他的表示分离,似的同样的构建过程可以创建不同的表示
优缺点
优点
将产品本身与产品构建过程解耦,使得相同创建过程可创建不同产品;具体建造者相互独立,扩展容易;可以精确控制产品创建过程
缺点
使用范围受限(要求所创建产品一般具有较多共同点);产品内部变化复杂会导致具体建造者过多
应用场景
要求按照指定的蓝图建造产品,通过组装零配件生产一个新的产品(产品对象具备共性)
角色
- Product:产品角色,一个具体的产品对象
- Builder:抽象建造者
- ConcreteBuilder:具体建造者,构建和转配各个部件
- Director:指挥者,创建一个复杂的对象
类图

代码
```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; }
public buildPartA() : void {}public buildPartB() : void {}public buildPartC() : void {}// 最终组建一个产品public buildProduct() : Product {return this.product;}
}
// 产品角色 class Product { public doSomething() : void { // 独立业务 } }
// 指挥者 class Director { private _builder : Builder; constructor(builder : Builder) { this._builder = builder; }
set builder(builder : Builder) {this._builder = builder;}// 将处理建造的流程交给指挥者public constructorProduct() {this._builder.buildPartA();this._builder.buildPartB();this._builder.buildPartC();return this._builder.buildProduct();}
}
// 使用 const builder : Builder = new ConcreteBuilder(new Product()); const director : Director = new Director(builder); const product : Product = director.constructorProduct(); ```
