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

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

    参考

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

    Overview

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

    工厂方法模式

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

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

    抽象工厂模式

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

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

    总结

    不同点

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

    共同点

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

    最后

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

  • 相关阅读:
    X509Certificate2 Class
    Difference Between Octet and Byte
    雅虎被裁员工写博客表达悲凉心境:晕眩数分钟
    Ruby on rails开发从头来(windows)(三十四) Active Support
    你不得不看的超牛面试(新版)
    Mongrel创建者炮轰Rails社区,并宣称和Rails社区决裂
    Ruby on rails开发从头来(windows)(三十一) Rails的目录结构
    Ruby on rails开发从头来(windows)(三十二) Rails的配置文件
    Ruby on rails开发从头来(windows)(三十) NetBeans IDE
    新闻+旧闻:Ruby 1.9,Ruby on Rails 2.0 ,NetBeans 6.0正式版
  • 原文地址:https://www.cnblogs.com/slyfox/p/8858773.html
Copyright © 2011-2022 走看看