设计模式-工厂模式(factory)

设计模式-工厂模式(factory)

特点:工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象。减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码。

通俗的说,以前创建一个对象要使用new,现在把这个过程封装起来了。

实际的应用场景:

1)做支付接口的时候,可能对应不同的支付网关:支付宝、财付通、网银在线等。方便未来扩展,设计成工厂模式。

2)php连接不同的数据库:可能要连接mysql,也可能要连接sqlserver,还可能连接oracle等等其他的数据库。那么就需要做一个抽象的数据库类。

3)在为用户注册的时候,分为很多种角色的用户。比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现,代码也容易维护,为每种角色可以生成操作的类。

 定义以下几个类:

UserFactory 用户工厂类,负责生成不同的用户类

User:用户类的基类,所有用户类都是继承这个类

不同角色的类:注册用户类、匿名用户类、管理员用户类

其实工厂模式有很多变体,抓住精髓才是关键:只要是可以根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想。

下图为简单工厂模式:

 

运行结果:
送玫瑰,送戒指!
穿婚纱!

下图为工厂模式:

运行结果:
送玫瑰,送戒指!
穿婚纱!

下图为抽象工厂:

 

运行结果:
美女,我送你玫瑰和戒指!
我偷偷喜欢你
我要穿婚纱!
我好害羞哦!!

区别:
简单工厂模式:用来生产同一等级结构中的任意产品。对与增加新的产品,无能为力

工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。

参考链接:https://segmentfault.com/a/1190000008803247

原文地址:https://www.cnblogs.com/hld123/p/12657025.html