下面例子中鼠标,键盘,耳麦为产品惠普,戴尔为工厂

简单工厂模式

简单工厂模式不是 23 种设计模式里的一种,简而言之,就是有一个专门生产某个产品的类。

比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。


工厂模式

  • 工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。
  • 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。
  • 生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。后续直接调用鼠标工厂.生产鼠标()即可


抽象工厂模式

  • 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
  • 也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。
  • 戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
  • 创建工厂时,由戴尔工厂创建。后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。

在抽象工厂模式中,假设我们需要增加一个工厂

  1. 假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承 PC 厂商。
  2. 之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类即可。

在抽象工厂模式中,假设我们需要增加一个产品

  1. 假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
  2. 之后在PC厂商这个父类中,增加生产耳麦的接口。
  3. 最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。

[设计模式]工厂模式与抽象工厂模式相关推荐

  1. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  2. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

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

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

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

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

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

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

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

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

  7. 设计模式_1_工厂模式与抽象工厂

    工厂模式 工厂模式(创建型模式):创建对象接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建延伸到子类进行 主要解决接口选择问题,明确计划不同条件下执行创建不同实例 通过子类实现工厂实例,创建 ...

  8. 设计模式笔记二:抽象工厂模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出,欢迎讨论. 简单定义: 抽象工厂模式(Abstract Factory Pattern) ...

  9. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

  10. 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象 ...

最新文章

  1. 请写出sfr和sbit的语句格式_单片机c语言的sbit和sfr
  2. php 长短字符串转换,将php的数组按照字符串长短进行排序
  3. PHP文件头部(header)解释
  4. requireJS文件夹
  5. 计算机科学导论第二章,计算机科学导论第二章.doc
  6. Css网格布局-Grid布局
  7. C语言试题三十二之编写函数function,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。
  8. design php 如何使用ant_Ant Design Pro初探—添加面包屑
  9. 很容易学习的JQuery库 : (八) 杂项 noConflict() 方法
  10. java隐藏与覆盖_Java 隐藏和覆盖
  11. 实验7-3-4 字符串替换 (15 分)
  12. 任务02——安装 Intellj IDEA,编写一个简易四则运算小程序,并将代码提交到 GitHub...
  13. Cannot load php5apache2_4.dll into server解决办法;
  14. jodconverter 远程配置_jodconverter支持什么格式转换
  15. python怎么回到开头_python如何回到cod的开始
  16. NB-IOT/LoRa/Zigbee无线组网方案对比
  17. Codeforces Round #811 (Div. 3) E. Add Modulo 10
  18. 玻色量子CEO文凯受邀出席首经贸金融学院系列讲座
  19. 深度学习与TensorFlow实战(十)卷积神经网络—VGG(16)神经网络
  20. dhl寄件邮编错了_DHL国际快递寄错国家怎么办?

热门文章

  1. 扩张背后短期亏损,奈雪的茶想要讲一个“量变到质变”的故事
  2. Cdr安装显示服务器出现,CorelDraw去掉出血位置打印 CDR双击编辑位图提示启动服务器应用程序失败 对象合并...
  3. EasyUI easyui-textbox 提示
  4. ARM_UNWIND_BACKTRACE (2)
  5. vue多html页面路由配置,vue-router——路由配置
  6. Python Web学习笔记之TCP/IP协议原理与介绍
  7. c# chart图表控件总结
  8. SqlSession和Mapper使用
  9. ALSA驱动中 -EPIPE,-ESTRPIPE,-EBADFD错误原因解析及对策
  10. 制作H5游戏做桌面和移动端响应的一些心得