zoukankan      html  css  js  c++  java
  • 设计模式杂谈

    设计模式杂谈 - 工厂方法模式与抽象工厂模式

    参考

    《大话设计模式》
    http://ichennan.com/2016/08/09/DesignPattern.html

    Overview

    本来在刚学习完 工厂方法模式 的时候,感觉很清晰和明了,但是后来学习到了抽象工厂模式 的时候,瞬间感觉被搞懵了。工厂方法模式抽象工厂模式不是一样吗? 这两个没什么区别呀。经过度娘的帮助我有一些我自己的看法,与大家分享。

    工厂方法模式

    工厂模式的类图
    我们先来看一下关于工厂方法模式的专业解释

    工厂方法模式(Factory Method): 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
    拙见:
    我认为工厂模式是对简单工厂模式的一个优化,解决了简单工厂违反了开放-封闭 原则的问题。在工厂方法中如果增加增加一个操作对象的话,是不用对工厂类进行修改的。只需要建立一个新的工厂即可。由客户端决定实例化哪个子类的对象,而不是将创建对象的操作放在工厂中。
    虽然工厂方法解决了简单工厂存在违反开放-封闭 原则,但是同时也带来了复杂度的上升: 每新建一个具体的操作类,都需要增加一个额外的工厂类。创建了大量的工厂类。

    抽象工厂模式

    抽象工厂模式
    同样,我们先来看一下关于抽象工厂的专业解释

    抽象工厂模式(Abstract Factory), 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
    拙见
    我认为抽象工厂最大的特点是: 抽象工厂创建的是一系列产品,比如上图中的外设工厂,就是创建了一系列外设相关的产品。

    总结

    不同点

    工厂方法模式和抽象工厂模式最大的区别就是: 工厂方法模式,一个工厂只创建一种产品,而抽象工厂模式创建的是一系列产品。

    共同点

    工厂方法和抽象工厂都是对简单工厂模式改良或者扩展,但是核心的编程思想仍然是工厂 的思想。

    最后

    有时候,设计模式之间的解析并非那么的明显,我们学设计模式一定不要照搬设计模式的模板,而是吸收其思想,有时候,我们可能会对标准的模式进行改造,使其适合特定的环境,有时候我们可能仅仅会时候某个设计模式的一部分,或者将多个设计模式结合在一起来使用。
    关于本文,是本人对着两种模式的一个自我的总结,文中有任何纰漏,敬请斧正。

  • 相关阅读:
    数据库索引分析(一)
    对象的序列化(串行化)分析(一)
    Java 集合类 TreeSet、TreeMap
    查找杀死指定进程delphi
    delphi集合的用法
    debian 删除软件
    linux 各种国内源更新 (source)
    screen 命令使用记录
    Python 常用import
    常用Python函数
  • 原文地址:https://www.cnblogs.com/slyfox/p/8858773.html
Copyright © 2011-2022 走看看