抽象工厂模式
2020-05-24 本文已影响0人
定金喜
1.抽象工厂模式的实现方式
网上主要有两种实现抽象工厂模式的方法
第一种参考文章:https://www.runoob.com/design-pattern/abstract-factory-pattern.html
第二种参考文章:http://c.biancheng.net/view/1351.html
主要是对这两种方案的优缺点进行比较:
第一种方案的类图:
优点:将每种类型的产品族包装成一个工厂,每个工厂里有该类型所有产品的集合
第二种方案的类图:
类结构图2
两种优缺点比较:
1.具体工厂的定义不同,第一种定义的具体工厂,是每种产品族的所有产品的创建工厂,第二种定义的具体工厂,是真正的每个具体工厂中所使用到的产品,例如现在有A和B两个工厂,但是A工厂只生产产品P1和产品P2,B工厂只生产产品P3和P4,则按照第二种方法,A工厂里面只能创建产品P1和P2,B工厂只能创建P3和P4 ,如果需要增加,则在各自的工厂中增加;按照第一种方法,每个工厂都可以创建所有类型的产品,个人建议第二种方法更合理;
2.两种方法获取具体产品的方式不同,第一种需要定义枚举类型,根据类型去判断需要创建那种类型的工厂和产品,有很多if else的判断,第二种方式不需要,使用起来更方便
2.个人建议的抽象工厂实现方案
个人建议采用两种相结合的方案
A工厂和B工厂是具体工厂
产品族工厂 FP1和FP2,产品族工厂有创建所有产品的接口
例如A工厂需要创建一个产品时,需要调用FP1或者FP2去获取,这样两者集合,比较灵活,如果A工厂需要增加一种产品时,可以只在A工厂去增加代码,其他地方不需要更改,而且每个工厂只能获取这个工厂提供的产品,也可以使代码更安全