GOF23-工厂模式

1.什么是工厂模式

就是实现创建者与调用者分离,工厂模式的核心(灵魂)其实就是:分工。

 

2.工厂模式有哪些

  • 简单工场模式(静态工厂)

简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接受的参数的不同来创建不同的对象并返回。其缺点是对新增的业务类无能为力,必须要修改代码来完成扩展(不满足OCP原则)。

我们先来看下没有工程类的情况

image imageimage

测试类Main方法及测试结果:

image

image

 

 

我们可以看出创建对象要直接与Audi、BMW类直接打打交道。

我们再来看使用简单工厂类

imageimageimage

可以看出,测试类并没有直接跟Audi、BMW类“直接打交道”,而是通过CarFactory来达到目的,可以理解创建对象的活已经交给CarFactory来做,不再由测试类直接创建(这也就是所谓的控制反转)。

  • 工厂方法模式

创建工厂类接口,通过新增业务类,来满足新功能(满足OCP原则),缺点:结构变得更加复杂,代码更加复杂,理论上工厂方法更优,但实际我们常用简单工厂模式。

我们需要创建一个工厂接口,及对应工厂实现类。

imageimageimage

测试类及结果

image image

可以看出,我们是通过新增产品工厂类来实现产品对象的创建,试下如果要新增一个保时捷对象,我们此时需要怎么做?其实我们只需要新增一个保时捷的工厂类(实现CarFactory)即可。与简单工厂模式相比较:工厂方法模式结构更复杂(需要多个产品类),代码上也相对复杂,管理难度大(维护起来麻烦)。

  • 抽象工厂模式

适用于生成不同产品族的全部产品,对于新产品无能为力,而是适用于产品族。比其上面两种工厂模式更复杂。

假设我们现在要创建多个接口产品,上面两种工厂模式就无能为力了。

imageimageimage

image

我们目前仅创建了一个Engine接口,分别创建了超级引擎类,中端引擎类,低端引擎类。其余接口由于篇幅关系就不一一截图了,道理类似。比如:我们再增加一个座椅接口,再分别创建超级座椅,中端座椅,低端座椅。

超级引擎+超级座椅+超级轮胎=超级汽车

中端引擎+超级座椅+超级轮胎=中级汽车

……..

这就形成了不同产品族。

image image

测试类及结果

imageimage

超级汽车工厂创造出汽车引擎是超级引擎。

3.总结

  • 简单工厂

即使在某种程度上不满足OCP设计原则,但是实际项目中用的最多。

  • 工厂方法

在不修改已存在类的前提下,通过增加新的工厂类来达到实现扩展的目的。

  • 抽象工厂

不能单独增加某个产品,可以增加产品族。

posted @ 2019-08-16 23:13  宝路  阅读(185)  评论(0编辑  收藏  举报