简单工厂模式:

准确的来说,简单工厂并不算是一个模式,他只是工厂家族的一个特例,因为他不满足“开放封闭原则”,为什么这么说呢,有图来说明:

                        

从图上,我们可以清楚地看到,在整个抽象运算类下,分别将每种算法进行封装,然后需要那种算法的时候就通过简单工厂类实例化出一个具体对象来,通过多态返回父类的方式实现计算器,也就是直接调用一个算法类;而且当我们需要添加算法的时候,只要再添加一个算法类就好了,很简单,也很方便。 所以简单工厂的优点就是工厂泪中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。但是同时问题也就出现了,当我要增加功能的时候,我们肯定要给运算工厂类的方法里添加Case的分支,修改原有的类,那 这就不仅仅是对拓展开放了,对修改也就同样开放了,所以说它不满足开放封闭原则,算不得是一个模式。

当然,科学的力量是无限的,为了解决这个问题,相对应的模式就出现了,那就是工厂家族的二姐

工厂方法模式


工厂方法个人简介:

内容:定义一个用于创建对象的接口,让子类决定实例化哪一个类。(工厂方法是一个类的实例化延迟到其子类),对于这个,我们可以清楚地从图中看出来,当我们要求算法实现的时候,选择依然存在,但是,我们是在客户端上决定要用什么算法工厂,然后让其实例化相对应的算法类。用户科学的话来说,就是工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行。在这里,如果我们还是想要添加功能,根本不需要修改工厂类,只需要修改客户端就可以了

凡事都是有两面性的,工厂方法的确很好,但并不是没有缺点的: 那就是我们每增加一个功能或者产品都需要增加一个产品工厂的类,增加了额外的开发量

下面重磅来袭,工厂家族的大姐大  抽象工厂模式


提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类。

有图可以明白,当每一个抽象产品有多于一个的具体子类的时候,就好比图中的AbstractProductA和AbstractProductB这两个抽象产品都有多于一个的具体子类实现,那么工厂类应该怎么知道实例化哪个子类呢?抽象工厂用的就提供两个具体的工厂角色ConcreteFactory1和ConcreteFactory1分别对应两个具体产品角色ProductA和ProductB,每个具体工厂角色只负责某一个对应的产品角色的实例化。

优点:

1.易于交换产品系列(由于具体共产类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置)

2.他让具体的创建实例过程与客户端分离,客户端是通过过他们的抽象接口操纵是实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中

但是抽象工厂不便于增加功能,因为每一增加功能的话,他就需要改变抽象工厂类,与其他的所有抽象类,十分的糟糕,真是有利有弊,各有千秋

这也就教导们,在对的时候用对的模式,再合适的时候做合适的事,才是最正确的

转载于:https://www.cnblogs.com/DoubleEggs/p/5747208.html

《大话》之 三大工厂相关推荐

  1. 研磨23种大话设计模式------简单工厂模式 + 工厂方法模式 + 抽象工厂模式

    大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 简 ...

  2. linkin大话设计模式--简单工厂

    linkin大话设计模式--工厂方法 什么是工厂方法:将多个类对象交给工厂来生成的设计被称为简单工厂模式,个人认为主要是为了实现解耦,在代码重构的时候会很重要. 代码如下: public class ...

  3. 大话设计模式:抽象工厂模式

    一.什么是抽象工厂模式 提供一个接口创建一组或一系列相关或互相依赖的对象 抽象工厂主要是针对种类繁多,需要一系列的对象组合的情况,而每次只需要实例其中的一组系列.是工厂模式的升级,进一步抽象,工厂模式 ...

  4. 三大工厂模式的优缺点

    简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封 ...

  5. 慧数纵览:日产在华三大工厂将减产30,000辆

    1[工厂布局] 由于中国汽车销量持续下跌,日产汽车计划未来几个月将在华产能缩减30,000辆.在日产之前,福特汽车和现代汽车已经决定减产.去年12月到今年2月,日产在华生产近400,000辆新车,而在 ...

  6. 大话设计模式 简单工厂模式

    读了一下大话设计模式这本书,发现非常不错,现在把练习的代码贴上来,,当然写得很烂,欢迎大家指正. 第一章: SimpleFactory.h #ifndef SIMPLEFACTORY_H #defin ...

  7. java 大结果_java三大工厂结果总览

    2018-11-02 21:27:18 开始写 谢谢.Thank you.Salamat Do(撒拉玛特朵).あリがCám o*n(嘉蒙)とゥ(阿里嘎都).????? (勘三哈咪瘩).terima K ...

  8. 大话小结(2)——创建型模式

    (单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式)      创建型模式包括以上五个,本文不再赘述定义部分,主要针对五种模式进行对比学习. 一.AbstractFactory VS Bui ...

  9. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

最新文章

  1. QT中添加背景图片,颜色,以及字体等
  2. 信息系统项目管理师之风险管理
  3. C语言中auto,register,extern,static【转】
  4. mysql中怎么存住文件链接_数据库如何保存链接文件
  5. Linux 查看磁盘容量、查找大文件、查找大目录
  6. android 应用自动退出,android – 应用程序自动退出,没有任何警告或错误
  7. 一念心动,一生绵延——如何修复min pulse width?
  8. 谁让APP工程师产生了泡沫?
  9. 什么是JavaScript异步编程?
  10. 移动端h5不支持font-family里面的楷体、微软雅黑等字体
  11. java字体推荐_最适合编程的10大字体推荐
  12. 计算机表格画斜线,word表格斜线_Word2010怎么绘制斜线表头-太平洋IT百科手机版...
  13. C++中在堆区用new开辟空间
  14. 两步验证 非双重认证
  15. 2017华为软件精英挑战赛小结
  16. 身份证阅读器(新中新)写入受保护内存问题,已解决
  17. java错误: xxx不是抽象的, 并且未覆盖xxx中的抽象方法
  18. 触目2006信息化之灾
  19. 新型AI助理BAYOU或将成为无代码编程的救星
  20. c语言浮点数无效,深入C++浮点数无效值定义与判定的解决办法

热门文章

  1. hadoop商品推荐_北京尚学堂学员学习经验分享:商品推荐
  2. 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文
  3. win10此电脑不见了_微软介绍 Win10 “重置此电脑”失败的解决方法 - 微软
  4. c 11 主要的新语言特性,C 11系列
  5. java 置位_java安全编码指南之:Mutability可变性详解
  6. 系统学习机器学习之SVM(二)
  7. clickhouse HDFS引擎
  8. cf 0.2 版本发布,lua 开发的另一种美
  9. 第 89 章 Hardware
  10. 洛谷 1429 平面最近点对(加强版) 快排 非点分治或kdtree