工厂方法到抽象工厂模式

视频课:https://edu.csdn.net/course/detail/30808

设计原则
要依赖抽象,不要依赖具体类

简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?工厂方法模式应运而生,本文将介绍第二种工厂模式——工厂方法模式。

1 什么是工厂方法模式

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

2 为什么要用该模式

在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。

此外,在简单工厂模式中,所有的产品都

C#工厂方法模式 -抽象工厂模式相关推荐

  1. 工厂模式(简单工厂,工厂方法,抽象工厂)

    工厂顾名思义就是创建产品,工厂分为三种:简单工厂,工厂方法,抽象工厂.该模式用于封装和管理对象的创建,是一种创建型模式. 1)简单工厂 该模式通过向工厂传递类型来指定要创建的对象 提供一个方法,根据类 ...

  2. 设计模式:工厂方法与抽象工厂模式

    说明:这篇blog写的很好,有助于理解工厂方法与抽象工厂模式的联系与区别. 原文链接:http://blog.csdn.net/yzxz/article/details/4601152 抽象工厂模式与 ...

  3. 23招做项目——工厂模式:工厂方法和抽象工厂

    在网上的大多数资料里面,将工厂模式分为:简单工厂.工厂方法.抽象工厂,他们之间的联系(以电子厂为例)如下: 那么该文章首先讲解工厂模式是什么,为什么需要工厂模式,最后再对三种模式进行示例.该文章是23 ...

  4. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  5. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  6. java 抽象工厂工厂_Java设计模式之简单工厂、工厂方法和抽象工厂

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:456544752我们一起学Java! 在前面的学习中(参见前面的博客),我们学到了很 ...

  7. 每周一个设计模式之工厂方法与抽象工厂

    工厂方法模式与抽象工厂模式,两个模式比较相似,把任何一个独立出来,好像都不太好,所以把它们放到一起来理解会更好.不管是工厂方法还是抽象工厂,都有三个要素,那就是Client,Factory,Produ ...

  8. 工厂方法 VS 抽象工厂

    工厂方法 VS 抽象工厂        工厂方法模式与抽象工厂抽象,经过多次学习,反复对比,最后得出了这样的结论:工厂方法模式与抽象工厂模式的区别仅在于业务更加的复杂.下面请看两模式的结构图 (一) ...

  9. 【设计模式实战】简单工厂、工厂方法、抽象工厂:原理篇

    小明开发的应用,经常要从XML或者Asset中读取省市区数据. 小明是这样写的: public abstract class IOHandler {/*** 添加*/public abstract v ...

  10. Python实现简单工厂、工厂方法、抽象工厂设计模式

    工厂模式 概念 实现 简单工厂 工厂方法 工厂方法优点 抽象工厂 工厂方法和抽象工厂的比较 概念 在面向对象中,工厂表示一个负责创建其他类型对象的类. 工厂具有: 松耦合 客户端无需了解创建对象的类, ...

最新文章

  1. glnxa64 matlab 什么版本_Matlab R2018a无法重新加载 /usr/local/MATLAB/R2018a/bin/glnxa64/libmwxcp_dwarf.so...
  2. 深入理解DOM事件类型系列第六篇——加载事件
  3. 分布式协调组件ZooKeeper的技术理论剖析-综合组件环境实战
  4. leaflet的入门开发(一)
  5. 智能理财在国内国外的发展现状
  6. 华为面试改革,我们该怎么跟进?
  7. JUC:ConcurrentHashMap(并发容器)
  8. Flutter Text详解
  9. Element-UI + Vue.js + SpringBoot 实现前后端分离入门项目
  10. 深入理解jQuery插件开发
  11. python 封装_Python面向对象之封装
  12. 线代 | 矩阵的迹 向量内积如何转化为迹
  13. 静态时序分析笔记-第二章:STA概念(下)
  14. python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...
  15. List 常用的 Lambda 操作
  16. 单向流动的拓扑结构_单向流与乱流净化工程原理是什么-百度经验
  17. respond.min.js/respond.js下载
  18. ncut算法matlab程序,Ncut算法的MATLAB代码下载及实现在MATLAB上正常运行
  19. 如何获取(清除)IE缓存地址信息
  20. 智科人之人工智能课程上机实验(智科还单独有一个综合实验):PROLOG语言练习与编程上机实验

热门文章

  1. C++ 循环链表练习题 报数删除【非常没有条理】
  2. 04.elasticsearch-dynamic_mapping_and_index_template
  3. poj 1144 割点和桥
  4. 【简洁代码】1071 小赌怡情 (15分)_22行代码
  5. 用计算机完成下表的视距测量计算公式,测量学计算题.doc
  6. java转文件编码bom_编码转换:UTF-8 BOM to GBK
  7. 计算机启动到安全模式,计算机启动每次都进入安全模式怎么办
  8. 学报格式和论文格式一样吗_学报投稿格式有哪些
  9. php mysql 非空_MySQL非空约束(NOT NULL)
  10. kmeans改进 matlab,基于距离函数的改进k―means 算法