定义:分离一个复杂对象的构建过程与表示,使得同样的构建过程可以创建不同的表示 类比:一个厨师在做一个三明治,可以按照你的需求放不同的配料,但是制作三明治的过程是相同的 应用场景 创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式 需要生成的产品有不同的表示,不同的具体化 优缺点 优点: 允许构造复杂的对象步骤化创建 分离对象的构建与表示 缺点 增加代码的复杂性,特别是需要多个具体生成器的时候 需要更多的内存来存储生成器实例 实现代码 class Product1 { public parts: string[] = []; public listParts(): void { console.log(`Product parts: ${this.parts.join(', ')}`); } } interface Builder { producePartA(): void; producePartB(): void; producePartC(): void; } class ConcreteBuilder1 implements Builder { private product: Product1; constructor() { this.reset(); } public reset(): void { this.product = new Product1(); } public producePartA(): void { this.product.parts.push('PartA1'); } public producePartB(): void { this.product.parts.push('PartB1'); } public producePartC(): void { this.product.parts.push('PartC1'); } public getProduct(): Product1 { const result = this.product; this.reset(); return result; } } class Director { private builder: Builder; public setBuilder(builder: Builder): void { this.builder = builder; } public buildMinimalViableProduct(): void { this.builder.producePartA(); } public buildFullFeaturedProduct(): void { this.builder.producePartA(); this.builder.producePartB(); this.builder.producePartC(); } } function clientCode(director: Director) { const builder = new ConcreteBuilder1(); director.setBuilder(builder); console.log('Standard basic product:'); director.buildMinimalViableProduct(); builder.getProduct().listParts(); console.log('Standard full featured product:'); director.buildFullFeaturedProduct(); builder.getProduct().listParts(); console.log('Custom product:'); builder.producePartA(); builder.producePartC(); builder.getProduct().listParts(); } const director = new Director(); clientCode(director);