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


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

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

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

    实际的应用场景:

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

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

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

     定义以下几个类:

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

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

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

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

    下图为简单工厂模式:

     

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

    下图为工厂模式:

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

    下图为抽象工厂:

     

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

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

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

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

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

  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    codevs 2977 二叉堆练习1x
    codevs 2010 求后序遍历x
    二叉树的序遍历x(内含结构体与非结构体版x)
    医院设置x
    求后序遍历x
    [LightOJ1017]Brush (III)(dp)
  • 原文地址:https://www.cnblogs.com/hld123/p/12657025.html
Copyright © 2020-2023  润新知