理解区分:简单工厂模式,工厂方法模式,抽象工厂模式

前言

很多人搞不懂简单工厂模式,工厂方法模式和抽象工厂模式三者的区别,看理论又很绕,怎么办?

这里我们不提太多理论,单从代码结构看,提供一种框架式的思路,具体如下:

简单工厂模式

类结构

一个工厂类
一个产品抽象类(或接口)
N个具体产品实现类

使用

1、根据需求,逐一实现产品抽象类
2、在工厂类中,根据需求生成具体哪个产品对象

工厂方法模式

类结构

一个工厂抽象类(或接口)
N个工厂实现类
一个产品抽象类(或接口)
N个产品实现类

使用

1、根据需求,逐一实现产品抽象类
2、根据需求,逐一实现工厂抽象类,在每个工厂实现类中,生成对应的产品(与简单工厂模式对比发现,这里将生产职责划分到具体的工厂类中了,也就是说,假如我现在要新增一个产品,只需要新增一个产品实现类和对应的工厂实现类就可以了)

抽象工厂模式

类结构

一个工厂抽象类(或接口)
N个工厂实现类
N个产品抽象类(或接口)
N个产品实现类

使用

1、根据需求,按产品族,逐一实现产品抽象类
2、根据需求,逐一实现工厂抽象类,在每个工厂实现类中,按产品族进行生产操作(因为针对的不再是单一产品,所以工厂实现类中,生产方法一般都会是多个)

总结

好了,现在我们再看看,归纳下,是不是很简单?

三种模式,复杂度和抽象都上都是逐渐增加的。

简单的,只抽象产品

一般的,产品和工厂都抽象了,职责分开了,符合了开闭原则

抽象的,不再按产品类,而是按产品族来抽象了,所以会有N个产品抽象类

但是无论那种,产品肯定都是要抽象的,只是第三种抽象的多一点而已(针对产品族)

:上面所列出的,只是普通情况下,可能出现的结构,并没有列出变体情况

你可能感兴趣的:(php,设计模式,工厂模式,后端)