[设计模式]工厂模式与抽象工厂模式
下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。
简单工厂模式
简单工厂模式不是 23 种设计模式里的一种,简而言之,就是有一个专门生产某个产品的类。
比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。
工厂模式
- 工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。
- 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。
- 生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。后续直接调用鼠标工厂.生产鼠标()即可
抽象工厂模式
- 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
- 也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。
- 戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
- 创建工厂时,由戴尔工厂创建。后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。
在抽象工厂模式中,假设我们需要增加一个工厂
- 假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承 PC 厂商。
- 之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类即可。
在抽象工厂模式中,假设我们需要增加一个产品
- 假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
- 之后在PC厂商这个父类中,增加生产耳麦的接口。
- 最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。
[设计模式]工厂模式与抽象工厂模式相关推荐
- 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细
1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- 021 设计模式之工厂方法模式,抽象工厂模式的区别
简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...
- 设计模式之工厂模式和抽象工厂
设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...
- [设计模式篇]工厂模式和抽象工厂模式
最近在看Head First的Design Pattern,想想去年候捷来学校给我们讲Design Pattern,但当时水平太弱根本听不懂,今年想趁机再好好学一波,候捷反而不来了,哎,人生就是这样, ...
- 回顾游戏中的设计模式:策略模式vs抽象工厂
最近有时间看看设计模式方面的书,好多东西时间久了不看就变得生疏起来, 在这里会抽出时间把自己在工作中使用过的设计模式做下总结. 刚才在看到别人说,简单工厂模式是"通过提供单独的一个类,来实现 ...
- 设计模式_1_工厂模式与抽象工厂
工厂模式 工厂模式(创建型模式):创建对象接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建延伸到子类进行 主要解决接口选择问题,明确计划不同条件下执行创建不同实例 通过子类实现工厂实例,创建 ...
- 设计模式笔记二:抽象工厂模式
原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出,欢迎讨论. 简单定义: 抽象工厂模式(Abstract Factory Pattern) ...
- Java设计模式之工厂方法模式与抽象工厂模式
2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...
- 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)
1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象 ...
最新文章
- 请写出sfr和sbit的语句格式_单片机c语言的sbit和sfr
- php 长短字符串转换,将php的数组按照字符串长短进行排序
- PHP文件头部(header)解释
- requireJS文件夹
- 计算机科学导论第二章,计算机科学导论第二章.doc
- Css网格布局-Grid布局
- C语言试题三十二之编写函数function,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。
- design php 如何使用ant_Ant Design Pro初探—添加面包屑
- 很容易学习的JQuery库 : (八) 杂项 noConflict() 方法
- java隐藏与覆盖_Java 隐藏和覆盖
- 实验7-3-4 字符串替换 (15 分)
- 任务02——安装 Intellj IDEA,编写一个简易四则运算小程序,并将代码提交到 GitHub...
- Cannot load php5apache2_4.dll into server解决办法;
- jodconverter 远程配置_jodconverter支持什么格式转换
- python怎么回到开头_python如何回到cod的开始
- NB-IOT/LoRa/Zigbee无线组网方案对比
- Codeforces Round #811 (Div. 3) E. Add Modulo 10
- 玻色量子CEO文凯受邀出席首经贸金融学院系列讲座
- 深度学习与TensorFlow实战(十)卷积神经网络—VGG(16)神经网络
- dhl寄件邮编错了_DHL国际快递寄错国家怎么办?
热门文章
- 扩张背后短期亏损,奈雪的茶想要讲一个“量变到质变”的故事
- Cdr安装显示服务器出现,CorelDraw去掉出血位置打印 CDR双击编辑位图提示启动服务器应用程序失败 对象合并...
- EasyUI easyui-textbox 提示
- ARM_UNWIND_BACKTRACE (2)
- vue多html页面路由配置,vue-router——路由配置
- Python Web学习笔记之TCP/IP协议原理与介绍
- c# chart图表控件总结
- SqlSession和Mapper使用
- ALSA驱动中 -EPIPE,-ESTRPIPE,-EBADFD错误原因解析及对策
- 制作H5游戏做桌面和移动端响应的一些心得