GOF23-工厂模式

1.什么是工厂模式

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

 

2.工厂模式有哪些

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

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

咱们先来看下没有工程类的状况3d

image imageimage

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

image

image

 

 

咱们能够看出建立对象要直接与Audi、BMW类直接打打交道。blog

咱们再来看使用简单工厂类接口

imageimageimage

能够看出,测试类并无直接跟Audi、BMW类“直接打交道”,而是经过CarFactory来达到目的,能够理解建立对象的活已经交给CarFactory来作,再也不由测试类直接建立(这也就是所谓的控制反转)。get

  • 工厂方法模式

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

咱们须要建立一个工厂接口,及对应工厂实现类。it

imageimageimage

测试类及结果扩展

image image

能够看出,咱们是经过新增产品工厂类来实现产品对象的建立,试下若是要新增一个保时捷对象,咱们此时须要怎么作?其实咱们只须要新增一个保时捷的工厂类(实现CarFactory)便可。与简单工厂模式相比较:工厂方法模式结构更复杂(须要多个产品类),代码上也相对复杂,管理难度大(维护起来麻烦)。

  • 抽象工厂模式

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

假设咱们如今要建立多个接口产品,上面两种工厂模式就无能为力了。

imageimageimage

image

咱们目前仅建立了一个Engine接口,分别建立了超级引擎类,中端引擎类,低端引擎类。其他接口因为篇幅关系就不一一截图了,道理相似。好比:咱们再增长一个座椅接口,再分别建立超级座椅,中端座椅,低端座椅。

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

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

……..

这就造成了不一样产品族。

image image

测试类及结果

imageimage

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

3.总结

  • 简单工厂

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

  • 工厂方法

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

  • 抽象工厂

不能单独增长某个产品,能够增长产品族。

相关文章
相关标签/搜索