抽象工厂模式
概述
抽象工厂模式是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类
解决方案
抽象工厂模式建议为系列中的每个产品明确声明接口,然后确保所有产品变体都继承这些接口。
抽象工厂模式适合应用的场景
-
如果代码需要与多个不同系列的相关产品交互,但是由于无法提前获取相关信息,或者出于对未来扩展性的考虑,你不希望代码基于产品的具体类进行构建,在这种情况下,你可以使用抽象工厂
抽象工厂为你提供了一个接口,可用于创建每个系列产品的对象。只要代码通过该接口创建对象,那么你就不会生成与应用程序已生成的产品类型不一致的产品
-
如果你有一个基于一组抽象方法的类,且其主要功能因此变得不明确,那么在这种情况下可以考虑使用抽象工厂模式
在设计良好的程序中,每个类仅负责一件事,如果一个类与多种类型产品交互,就可以考虑将工厂方法抽取到独立的工厂类或具备完整功能的抽象工厂类中
实现方式
- 以不同的产品类型与产品变体为维度绘制矩阵
- 为所有产品声明抽象产品接口。然后让所有具体产品类实现这些接口
- 声明抽象工厂接口,并且在接口中为所有抽象产品提供一组构建方法
- 为每种产品变体实现一个具体工厂类
- 在应用程序中开发初始化代码。该代码根据应用程序配置或当前环境,对特定具体工厂类进行初始化,然后将该工厂对象传递给所有需要创建产品的类
- 找出代码中所有对产品构造函数的直接调用,将其替换为对工厂对象中相应构建方法的调用
抽象工厂模式的优缺点
优点:
- 可以确保同一工厂生成的产品相互匹配
- 可以避免客户端和具体产品代码的耦合
- 单一职责原则
- 开闭原则
缺点:
- 由于采用该模式需要向应用中引入众多接口和类,代码可能会比之前更加复杂
特别注意
抽象工厂模式和工厂方法模式的本质区别
我个人认为本质区别就是工厂方法针对的是一个产品等级结构和一个抽象产品类,但是抽象工厂针对的却是多个产品等级结构和多个产品类