生成器模式是一種在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' }