抽象工厂模式
模式描述
提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类。
优点
- 分离了具体的产品类;
- 有利于产品一致性;
缺点
- 难以扩展抽象工厂
应用场景
- 一个系统要独立产品的创建、组合和表示;
- 一个系统要由多个产品系列中的一个来配置;
- 提供一个产品库,只显示接口而非实现;
DATE | CHANGELOG |
---|
UML 类图
classDiagram
class AbstractFactory {
<<interface>>
createProductA()
createProductB()
}
class ConcreteFactoryA {
createProductA()
createProductB()
}
class ConcreteFactoryB {
createProductA()
createProductB()
}
AbstractFactory <|.. ConcreteFactoryA
AbstractFactory <|.. ConcreteFactoryB
class AbstractProduct {
<<interface>>
operator()
}
class ConcreteProductA {
operator()
}
class ConcreteProductB {
operator()
}
AbstractProduct <|.. ConcreteProductA
AbstractProduct <|.. ConcreteProductB
ConcreteFactoryA <-- ConcreteProductA
ConcreteFactoryB <-- ConcreteProductB
AbstractFactory <-- Client
AbstractProduct <-- Client
参与者
AbstractFactory
- 声明创建抽象产品的方法
ConcreteFactoryX
- AbstractFactory 的实现;
AbstractProduct
- 为一类产品对象声明方法;
ConcreteProductX
- AbstractProduct 的实现;
Client 类
客户端。
数据流
- 客户端通常创建一个 ConcreteFactory 对象,用来创建对应的 Product;
- AbstractFactory 将对象创建延迟到 ConcreteFactory 中;
相关模式
- 工厂方法模式:抽象工厂常用工厂方法实现;
- 原型模式:抽象工厂也能用原型模式实现;
- 单例模式:一个具体的工厂是单例的;