生成器模式是一种在TypeScript/JavaScript中很是常见的建立型设计模式,它使你可以分步骤建立复杂对象。当你须要建立一个可能有许多配置选项的对象时, 该模式会特别有用。typescript
假设咱们须要构造一个复杂对象,构造时须要给这个对象的诸多成员变量进行初始化工做,若是使用传统的构造函数建立这个对象,那么它的构造函数将十分复杂,好比new Product(partA, partB, partC, ...)
,这样的构造函数不只缺少灵活性还会严重的影响代码的可读性,所以咱们须要一种更优秀的方法来建立复杂对象。设计模式
class Product { public partA: string; public partB: string; public partC: string; public partD: string; }
能够将基本生成器定义为一个接口,再为每一个形式的产品建立具体的生成类,这里只定义一个生成器类做为演示函数
class ProductBuilder { private product: Product; constructor() { // 建立要生成的对象 this.product = new Product(); } // 如下为给对象添加各部分的方法 public setPartA(partA: string): this { this.product.partA = partA; return this; } public setPartB(partB: string): this { this.product.partB = partB; return this; } public setPartC(partC: string): this { this.product.partC = partC; return this; } public setPartD(partD: string): this { this.product.partD = partD; return this; } // 完成产品生成 public build(): void { // 这里能够写具体的构建完成后要执行的操做 console.log(this.product); } }
const product = new ProductBuilder() .setPartA('这是Part A') .setPartB('这是Part B') .setPartD('这是Part D') .build(); // Product { partA: '这是Part A', partB: '这是Part B', partD: '这是Part D' }
const product = new ProductBuilder() .setPartA('这是Part A') .setPartB('这是Part B') .build(); // Product { partA: '这是Part A', partB: '这是Part B' }