2019独角兽企业重金招聘Python工程师标准>>>

工厂是一种抽象,将创建对象的过程抽象;而抽象工厂更进一层,把工厂本身都抽象了。

工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类;

抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

简单工厂

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

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

工厂方法

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。

在同一等级结构中,支持增加任意产品。

抽象工厂

抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。

应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。

小结

★工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。

★使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。

★工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。

区别

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

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

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

转载于:https://my.oschina.net/hanzhankang/blog/195150

工厂模式和抽象工厂模式的区别相关推荐

  1. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

  2. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  3. 工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 工厂模式于抽象工厂的区别 设计模式

    工厂模式 定义一个用于创建对象的接口,让子类实现具体类的创建.工厂将类的实例化延迟的子类. 良好的分装性.对于具体产品,只要知道产品名称即可(类名或字符串),封闭了对产品创建的细节. 屏蔽具体产品类. ...

  4. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  5. “工厂模式和抽象工厂的区别”的认识

    这几天再次复习了工厂模式和抽象工厂模式,发现工厂模式和抽象工厂简直太像了. 工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行. 抽象工厂模式:提 ...

  6. 简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是设计模式的一类:对于设计模式这个概念 ...

  7. 设计模式之工厂模式和抽象工厂

    设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...

  8. [设计模式篇]工厂模式和抽象工厂模式

    最近在看Head First的Design Pattern,想想去年候捷来学校给我们讲Design Pattern,但当时水平太弱根本听不懂,今年想趁机再好好学一波,候捷反而不来了,哎,人生就是这样, ...

  9. 回顾游戏中的设计模式:策略模式vs抽象工厂

    最近有时间看看设计模式方面的书,好多东西时间久了不看就变得生疏起来, 在这里会抽出时间把自己在工作中使用过的设计模式做下总结. 刚才在看到别人说,简单工厂模式是"通过提供单独的一个类,来实现 ...

  10. 创建型模式:抽象工厂

    个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...

最新文章

  1. matlab--常微分方程的数值解(ODE-s)
  2. 打印下标iOS 6-字面量
  3. 独家发布 | 产品经理生存现状
  4. 【揭秘】视频直播关键技术
  5. msysGit管理GitHub代码
  6. shell命令总结3
  7. laravel商品图片怎么展示_如何使用Laravel图片处理包intervention-image
  8. linux audit审计(6)--audit永久生效的规则配置
  9. tp摄像头的默认地址_tp-link怎么设置无线桥接 tp-link设置无线桥接方法【图文】...
  10. 赚钱的方法地推拉新一定算一个
  11. oracle 查询clob
  12. net_sf_interfacecpp项目诞生宣言
  13. 使用sysbench 0.5 对mysql 进行性能、压力测试
  14. Unity塔防游戏学习(六)
  15. 温度转换python代码解释_python温度转换代码
  16. 【历史上的今天】7 月 23 日:Novell 挑战微软;计算机界的教育家出生;第一颗 Landsat 卫星发射
  17. Python之Pickle学习
  18. 企业公众号文章写作方向要从这几个方面着手
  19. 量子通信,究竟是怎样保障信息安全的?
  20. Iperf测试问题处理指南

热门文章

  1. 编码utf-8的不可映射字符_不要在 MySQL 中使用“utf8”,请使用“utf8mb4”
  2. python行转列_pandas.DataFrame中pivot()如何实现行转列的问题(代码)
  3. c 导入数据到oracle,excel中数据导入到Orcale数据库表中的方法 | 学步园
  4. 人工智能 ppt_【138期】厉害了!人工智能高清大图+PPT模板全集系列!
  5. 异步fifo_FPGA设计基础——FIFO的应用
  6. win10千万不要重置_DELL戴尔电脑WIN10升级后没有声音
  7. php 剪贴板,之Windows中的剪贴板
  8. linux 更改文件和目录权限
  9. 零基础学前端开发之CSS基础
  10. Ajax与三层架构实训教案