抽象工厂模式
基本原理
含义
抽象工厂模式,即Abstract Factory Pattern,提供一个创建一
系列
相关或相互依赖对象的接口,
而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。
解决的问题
即工厂方法模式的缺点: 每个工厂只能创建一类产品
组成部分
组成 | 关系 | 作用 |
---|---|---|
抽象产品(IProduct) | 产品顶级抽象父类 | 描述产品的公共接口 |
抽象子产品(IxxProduct) | 具体产品类的父类,顶级抽象父类的子类 | 描述相对具体的抽象产品的公共接口 |
具体产品(XxProduct) | 具体产品类,抽象父类的子类 | 描述具体的产品 |
抽象工厂(Factory) | 具体工厂的父类 | 描述工厂的公共接口 |
具体工厂(XxFactory) | 具体工厂类,抽象工厂的子类 | 描述具体工厂 |
UML类图
使用步骤
- 创建产品标准
- 创建产品抽象类(一系列相关的产品)
- 创建具体产品类
- 创建工厂标准
- 创建生产具体产品的工厂
优点
- 低耦合
将具体产品的创建延迟到子类。
- 更符合开闭原则
新增系列相关产品时,只需要增加具体的工厂和工厂需要生产的具体产品即可。
- 符合单一职责原则,
每个具体工厂类只负责创建对应的产品
缺点
抽象工厂模式很难支持新种类产品的变化。
这是因为抽象工厂接口中已经确定了可以被创建的产品集合,
如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,
这样也就违背了“开发——封闭”原则。
适用场景
- 一个系统不依赖产品类实例的创建和组合。
- 这个系统有多个系列的产品,而系统中只能消费其中的一系列产品。
- 系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。
总结
尽信书不如无书,任何脱离实际业务的架构都是在耍流氓;
所谓原则,只是为了更好地为我们服务;
具体如何应用需要我们在业务实践中灵活把控。