• 简单工厂,抽象工厂,工厂模式三者的对照


    简单工厂,抽象工厂,工厂模式三者的对照

    作者: TindleWei
    博客: http://blog.csdn.net/mennoa(转载请说明出处)
    GitHub: https://github.com/TindleWei

    我想大家都熟悉工厂模式,可是要分清简单工厂。抽象工厂。工厂模式可能就没那么easy了。所以我查看了很多资料以及设计模式关于工厂模式的介绍,以下来总结一下。

    前言

    简单工厂,抽象工厂。工厂模式都属于创建型模式。

    该模式的特点是抽象了实例化的过程。它们帮助了一个系统独立于怎样创建、组合和表示它的那些对象。

    其有两个明显特征:
    1. 它们都将关于系统使用哪些详细的类的信息封装了起来。


    2. 他们隐藏了这些实例是怎样被创建和放在一起的。

    分类

    • 第一种分法:3种

      这是一般的情况,工厂模式分为三种:

      • 简单工厂模式

        简单工厂模式的工厂类通常是使用静态方法,通过接收的參数的不同来返回不同的对象实例。


        不改动代码的话。是无法扩展的。

      • 抽象工厂模式

        别名:Virtual Constructor
        提供一个创建一系列相关或相互依赖对象的接口。而无需指定它们详细的类。

        简单说就是将对象的声明和实现分离。

      • 工厂方法模式

        别名:Kit
        定义一个用于创建对象的接口,让子类决定实例化哪一个类。简单说使一个类的实例化延迟到其子类。

    • 另外一种分法:2种

      依据 GOF 的经典之作 《设计模式》,其将工厂模式分为两种:

      • 工厂方法模式

      • 抽象工厂模式

      而简单工厂模式被归入 工厂方法模式,看做一种特例。

      简单工厂模式的工厂类通常是使用静态方法。通过接收的參数的不同来返回不同的对象实例。

      经常会看到其工厂中依据參数不同switch。返回不同的产品。

    • 第三种分法:4种

      另一种说法,除了上面的三种,还有个 静态工厂模式
      比如项目中的工具类,TextUtil.isEmpty等。类+静态方法

    特点

    • 工厂方法模式:

      一个抽象产品类,能够派生出多个详细产品类。


      一个抽象工厂类。能够派生出多个详细工厂类。
      每一个详细工厂类仅仅能创建一个详细产品类的实例。

    • 抽象工厂模式:

      多个抽象产品类,每一个抽象产品类能够派生出多个详细产品类。


      一个抽象工厂类,能够派生出多个详细工厂类。


      每一个详细工厂类能够创建多个详细产品类的实例。

    差别

    • 简单工厂 : 用来生产同一等级结构中的随意产品。

      (对于添加新的产品,无能为力)

    • 工厂方法 :用来生产同一等级结构中的固定产品。(支持添加随意产品)

    • 抽象工厂 :用来生产不同产品族的所有产品。(对于添加新的产品。无能为力;支持添加产品族)

    工厂方法模式仅仅有一个抽象产品类,而抽象工厂模式有多个。
    工厂方法模式的详细工厂类仅仅能创建一个详细产品类的实例,而抽象工厂模式能够创建多个

    讨论


    用一个系统创建的那些对象的类对系统进行參数化有两种经常用法。

    一种是生成创建对象的子类,如工厂方法模式。

    但假设要改变产品类,就须要创建新的子类。

    另一种对系统进行參数化的方法很多其它的依赖于对象的复合:定义一个新的工厂对象负责创建产品对象。

    假设是工厂方法模式。所有的产品都来自于抽象产品这一个父类,通过參数的不同创建不同的子类。

    而抽象工厂方法,每一个分类的产品都有一个该类产品的父类。每类对象分别创建并组合。

    通常我们使用的也是最简单的工厂方法模式。作为一种标准的创建对象的方法。

    可是当被实例化的类根本不发生变化或当实例化出如今子类 能够非常easy定义的操作中,如初始化操作,这就并不必要了。

    參考


    《设计模式 可复用面向对象软件的基础》 –GOF

    http://zyjustin9.iteye.com/blog/2094960

    http://lh-kevin.iteye.com/blog/1981574

    http://blog.csdn.net/hitwhylz/article/details/40381721

    http://blog.csdn.net/jason0539/article/details/23020989

    http://blog.csdn.net/jason0539/article/details/23020989

  • 相关阅读:
    css学习总结
    bootstrap的学习总结
    一些组件配置的理解
    php 微信公众号支付(小程序也是这么支付的)
    mysql 链接超过ip限制时的报错
    php生成二维码
    wamp配置虚拟主机 php 5.6.25
    php 渣全的循环
    4、kafka、spark streaming
    gauss消元
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6853013.html
Copyright © 2020-2023  润新知