就是实现建立者与调用者分离,工厂模式的核心(灵魂)其实就是:分工。测试
简单工厂模式也叫静态工厂模式,就是工厂类通常使用静态方法,经过接受的参数的不一样来建立不一样的对象并返回。其缺点是对新增的业务类无能为力,必需要修改代码来完成扩展(不知足OCP原则)。设计
咱们先来看下没有工程类的状况3d
测试类Main方法及测试结果:对象
咱们能够看出建立对象要直接与Audi、BMW类直接打打交道。blog
咱们再来看使用简单工厂类接口
能够看出,测试类并无直接跟Audi、BMW类“直接打交道”,而是经过CarFactory来达到目的,能够理解建立对象的活已经交给CarFactory来作,再也不由测试类直接建立(这也就是所谓的控制反转)。get
建立工厂类接口,经过新增业务类,来知足新功能(知足OCP原则),缺点:结构变得更加复杂,代码更加复杂,理论上工厂方法更优,但实际咱们经常使用简单工厂模式。产品
咱们须要建立一个工厂接口,及对应工厂实现类。it
测试类及结果扩展
能够看出,咱们是经过新增产品工厂类来实现产品对象的建立,试下若是要新增一个保时捷对象,咱们此时须要怎么作?其实咱们只须要新增一个保时捷的工厂类(实现CarFactory)便可。与简单工厂模式相比较:工厂方法模式结构更复杂(须要多个产品类),代码上也相对复杂,管理难度大(维护起来麻烦)。
适用于生成不一样产品族的所有产品,对于新产品无能为力,而是适用于产品族。比其上面两种工厂模式更复杂。
假设咱们如今要建立多个接口产品,上面两种工厂模式就无能为力了。
咱们目前仅建立了一个Engine接口,分别建立了超级引擎类,中端引擎类,低端引擎类。其他接口因为篇幅关系就不一一截图了,道理相似。好比:咱们再增长一个座椅接口,再分别建立超级座椅,中端座椅,低端座椅。
超级引擎+超级座椅+超级轮胎=超级汽车
中端引擎+超级座椅+超级轮胎=中级汽车
……..
这就造成了不一样产品族。
测试类及结果
超级汽车工厂创造出汽车引擎是超级引擎。
即便在某种程度上不知足OCP设计原则,可是实际项目中用的最多。
在不修改已存在类的前提下,经过增长新的工厂类来达到实现扩展的目的。
不能单独增长某个产品,能够增长产品族。