前言
很多人搞不懂简单工厂模式,工厂方法模式和抽象工厂模式三者的区别,看理论又很绕,怎么办?
这里我们不提太多理论,单从代码结构看,提供一种框架式的思路,具体如下:
简单工厂模式
类结构
一个工厂类
一个产品抽象类(或接口)
N 个具体产品实现类
使用
1、根据需求,逐一实现产品抽象类
2、在工厂类中,根据需求生成具体哪个产品对象
工厂方法模式
类结构
一个工厂抽象类(或接口)
N 个工厂实现类
一个产品抽象类(或接口)
N 个产品实现类
使用
1、根据需求,逐一实现产品抽象类
2、根据需求,逐一实现工厂抽象类,在每个工厂实现类中,生成对应的产品(与简单工厂模式对比发现,这里将生产职责划分到具体的工厂类中了,也就是说,假如我现在要新增一个产品,只需要新增一个产品实现类和对应的工厂实现类就可以了)
抽象工厂模式
类结构
一个工厂抽象类(或接口)
N 个工厂实现类
N 个产品抽象类(或接口)
N 个产品实现类
使用
1、根据需求,按产品族,逐一实现产品抽象类
2、根据需求,逐一实现工厂抽象类,在每个工厂实现类中,按产品族进行生产操作(因为针对的不再是单一产品,所以工厂实现类中,生产方法一般都会是多个)
总结
好了,现在我们再看看,归纳下,是不是很简单?
三种模式,复杂度和抽象都上都是逐渐增加的。
简单的,只抽象产品
一般的,产品和工厂都抽象了,职责分开了,符合了开闭原则
抽象的,不再按产品类,而是按产品族来抽象了,所以会有 N 个产品抽象类
但是无论那种,产品肯定都是要抽象的,只是第三种抽象的多一点而已(针对产品族)
注:上面所列出的,只是普通情况下,可能出现的结构,并没有列出变体情况