设计模式-工厂模式(factory)
特点:工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象。减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码。
通俗的说,以前创建一个对象要使用new,现在把这个过程封装起来了。
实际的应用场景:
1)做支付接口的时候,可能对应不同的支付网关:支付宝、财付通、网银在线等。方便未来扩展,设计成工厂模式。
2)php连接不同的数据库:可能要连接mysql,也可能要连接sqlserver,还可能连接oracle等等其他的数据库。那么就需要做一个抽象的数据库类。
3)在为用户注册的时候,分为很多种角色的用户。比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现,代码也容易维护,为每种角色可以生成操作的类。
定义以下几个类:
UserFactory 用户工厂类,负责生成不同的用户类
User:用户类的基类,所有用户类都是继承这个类
不同角色的类:注册用户类、匿名用户类、管理员用户类
其实工厂模式有很多变体,抓住精髓才是关键:只要是可以根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想。
下图为简单工厂模式:
运行结果:
送玫瑰,送戒指!
穿婚纱!
下图为工厂模式:
运行结果:
送玫瑰,送戒指!
穿婚纱!
下图为抽象工厂:
运行结果:
美女,我送你玫瑰和戒指!
我偷偷喜欢你
我要穿婚纱!
我好害羞哦!!
区别:
简单工厂模式:用来生产同一等级结构中的任意产品。对与增加新的产品,无能为力
工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。
参考链接:https://segmentfault.com/a/1190000008803247