定义
为了创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类
优缺点
优点
增加新的产品族很容易
缺点
增加新增的产品结构很麻烦(违背开闭原则)
应用场景
无需关心对象的创建过程、系统有多于一个的产品族且每次只需要某一个产品族、产品等级结构稳定
角色
- AbstractProduct:抽象产品类
- ConcreteProduct:具体产品类
- AbstractFactory:抽象工厂类
- ConcreteFactory:具体工厂类
类图
代码
```typescript // 抽象工厂接口 interface AbstractFactory { createProductA() : AbstractProductA; createProductB() : AbstractProductB; }
// 抽象产品A接口 interface AbstractProductA {}
// 抽象产品B接口 interface AbstractProductB {}
// 具体工厂1 class ConcreteFactory1 implements AbstractFactory { constructor() {} public createProductA() : AbstractProductA { return new ConcreteProductA1(); } public createProductB() : AbstractProductB { return new ConcreteProductB1(); } }
// 具体工厂2 class ConcreteFactory2 implements AbstractFactory { constructor() {} public createProductA() : AbstractProductA { return new ConcreteProductA2(); } public createProductB() : AbstractProductB { return new ConcreteProductB2(); } }
// 具体产品A1 class ConcreteProductA1 implements AbstractProductA {} // 具体产品A2 class ConcreteProductA2 implements AbstractProductA {} // 具体产品B1 class ConcreteProductB1 implements AbstractProductB {} // 具体产品B2 class ConcreteProductB2 implements AbstractProductA {}
// 使用 const factory1 : AbstractFactory = new ConcreteFactory1(); const factory2 : AbstractFactory = new ConcreteFactory2(); const productA1 : AbstractProductA = factory1.createProductA(); const productA2 : AbstractProductA = factory2.createProductA(); const productB1 : AbstractProductB = factory1.createProductB(); const productB2 : AbstractProductB = factory2.createProductB(); ```
