抽象工厂模式 
抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
抽象工厂模式又称为 Kit 模式,属于对象创建型模式。
示意图 

示意代码 
以奶茶为例,我们想制作不同类型的奶茶,比如 BubbleTea、FruitTea,它们可能属于不同的品牌,比如 Mixue、HEYTEA。每个品牌都有自己的制作方法。
typescript
interface BubbleTea {
    makeBubbleTea(): string;
}
interface FruitTea {
    makeFruitTea(): string;
}
class MixueBubbleTea implements BubbleTea {
    public makeBubbleTea() {
        return 'Mixue Bubble Tea';
    }
}
class HEYTEABubbleTea implements BubbleTea {
    public makeBubbleTea() {
        return 'HEYTEA Bubble Tea';
    }
}
class MixueFruitTea implements FruitTea {
    public makeFruitTea() {
        return 'Mixue Fruit Tea';
    }
}
class HEYTEAFruitTea implements FruitTea {
    public makeFruitTea() {
        return 'HEYTEA Fruit Tea';
    }
}
interface DrinkFactory {
    createBubbleTea(): BubbleTea;
    createFruitTea(): FruitTea;
}
class MixueDrinkFactory implements DrinkFactory {
    public createBubbleTea() {
        return new MixueBubbleTea();
    }
    public createFruitTea() {
        return new MixueFruitTea();
    }
}
class HEYTEADrinkFactory implements DrinkFactory {
    public createBubble Tea() {
        return new HEYTEABubbleTea();
    }
    public createFruitTea() {
        return new HEYTEAFruitTea();
    }
}
// usage
function makeDrink(factory: DrinkFactory) {
    const bubbleTea = factory.createBubbleTea();
    const fruitTea = factory.createFruitTea();
}interface BubbleTea {
    makeBubbleTea(): string;
}
interface FruitTea {
    makeFruitTea(): string;
}
class MixueBubbleTea implements BubbleTea {
    public makeBubbleTea() {
        return 'Mixue Bubble Tea';
    }
}
class HEYTEABubbleTea implements BubbleTea {
    public makeBubbleTea() {
        return 'HEYTEA Bubble Tea';
    }
}
class MixueFruitTea implements FruitTea {
    public makeFruitTea() {
        return 'Mixue Fruit Tea';
    }
}
class HEYTEAFruitTea implements FruitTea {
    public makeFruitTea() {
        return 'HEYTEA Fruit Tea';
    }
}
interface DrinkFactory {
    createBubbleTea(): BubbleTea;
    createFruitTea(): FruitTea;
}
class MixueDrinkFactory implements DrinkFactory {
    public createBubbleTea() {
        return new MixueBubbleTea();
    }
    public createFruitTea() {
        return new MixueFruitTea();
    }
}
class HEYTEADrinkFactory implements DrinkFactory {
    public createBubble Tea() {
        return new HEYTEABubbleTea();
    }
    public createFruitTea() {
        return new HEYTEAFruitTea();
    }
}
// usage
function makeDrink(factory: DrinkFactory) {
    const bubbleTea = factory.createBubbleTea();
    const fruitTea = factory.createFruitTea();
}优缺点 
优点 
- 封装性好,在增加新的产品系列时不需要修改抽象层代码。
 - 扩展性高,在增加新产品族时只需要添加一个工厂类即可。
 
缺点 
- 难以应对“新对象”的需求变动(在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品)。
 
使用场景 
- 当系统中有多个产品族,并且各产品族在特定系列下的对象之间有相互依赖、或作用的关系,产品族之间可以相互独立变化时;
 - 抽象工厂模式主要在于应对“新系列”的需求变动。