TypeScript實現設計模式——生成器模式

生成器模式是一種在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' }
相關文章
相關標籤/搜索