工厂方法模式 
在工厂方法模式(Factory Method Pattern)中,工厂父类负责定义创建对象的公共接口,而工厂子类则负责生成具体的产品对象。
工厂方法模式又称为工厂模式,也叫虚拟构造器模式或者多态工厂模式,它属于类创建型模式。
示意图 

示例代码 
typescript
abstract class MilkTea {}
class BubbleTea extends MilkTea {}
class FruitTea extends MilkTea {}
abstract class MilkTeaFactory {
  abstract create(): MilkTea;
}
class BubbleTeaFactory extends MilkTeaFactory {
  create(): BubbleTea {
    return new BubbleTea();
  }
}
class FruitTeaFactory extends MilkTeaFactory {
  create(): FruitTea {
    return new FruitTea();
  }
}
// usage
function makeMilkTea(factory: MilkTeaFactory): void {
  const milkTea = factory.create();
}abstract class MilkTea {}
class BubbleTea extends MilkTea {}
class FruitTea extends MilkTea {}
abstract class MilkTeaFactory {
  abstract create(): MilkTea;
}
class BubbleTeaFactory extends MilkTeaFactory {
  create(): BubbleTea {
    return new BubbleTea();
  }
}
class FruitTeaFactory extends MilkTeaFactory {
  create(): FruitTea {
    return new FruitTea();
  }
}
// usage
function makeMilkTea(factory: MilkTeaFactory): void {
  const milkTea = factory.create();
}优缺点 
优点 
- 封装性:隐藏了产品的具体实现,使得新增产品类时不需要修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品。
 - 扩展性:易于增加新的产品类型,只需添加相应的子类和对应的工厂即可。
 
缺点 
- 每新增一个产品,就需要新增一个对应的工厂类和产品类,在一定程度上增加了系统的复杂度。
 
应用场景 
- 工厂方法用于隔离对象的使用和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。
 - 解决“单个对象”的需求变化。