定义

定义了一个创建对象的抽象方法,由子类决定要实例化的类

优缺点

优点
用户只需要关心产品对应的工厂;添加新产品只要添加一个具体的工厂和具体的产品
缺点
类个数成倍增加(增加一个产品会增加具体类和实现工厂)

应用场景

所有生成对象的地方都可以使用、需要灵活且可扩展的框架时

角色

  • Creator: 抽象工厂类
  • ConcreteCreator:具体工厂类
  • Product:抽象产品类
  • ConcreteProduct:具体产品类

    类图

    image.png

    代码

    ```typescript // 抽象产品接口 interface Product{ method1() : void; method2() : void; }

// 具体产品一 class ConcreteProduct1 implements Product { constructor(){} method() {

  1. }
  2. method() {
  3. }

}

// 具体产品二 class ConcreteProduct2 implements Product { constructor(){} method1() {

  1. }
  2. method2() {
  3. }

}

// 抽象工厂 abstract class Creator { public abstract createProduct(type : number) : Product; }

// 具体工厂 class ConcreteCreator extends Creator { constructor(){ super(); }

  1. public createProduct(type : number) : Product {
  2. let product = null;
  3. if (type === 1) {
  4. product = new ConcreteProduct1();
  5. } else if (type === 2) {
  6. product = new ConcreteProduct2();
  7. }
  8. return product;
  9. }

}

// 使用 const creator : Creator = new ConcreteCreator(); const myProduct : Product = creator.createProduct(1); ```