设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则

介绍:

Factory Pattern有3种当然是全部是creational pattern。

1.Simple Factory Pattern

2.Factory Method Pattern

3.Abstract Factory Pattern

这三个Pattern都以在之前模式基础上演变而来。

Factory Pattern是把同一类型的东西都封装在了Factory类中,使用什么Product只要通过Factory创建就可以了。

1.Simple Factory Pattern

简单工厂模式仅仅把product类封装在一个类中。并没有使用抽象类。

模式结构:

简单工厂模式只要了解就行。因为缺点比较多。

比如说增加一个ConcreteProductC的时候需要改动Factory类,只明显违背了开闭原则。

2.Factory Method Pattern

在工厂方法模式中优化了一下简单工厂模式。它考虑到了今后会扩展。

改善方式如下:

不难看出它比简单工厂模式多了以个抽象类当做工厂类的父类。每一个具体工厂类只负责创建一个具体产品。

模式结构:

这种模式把每一个产品都由独立的一个具体工厂类去负责创建。这样今后扩展那么就可以满足开闭原则。

只需添加一个ConcreteFactory+ConcreteProduct就可以了。

在客户端代码中只需:

Factory factory;
Product product;
factory=new ConcreteFactory();
product =factory.factoryMethod();

如果你想创建其他的product那么只需更改对应的具体工厂即可。

但是此种模式还是有缺点的。虽然它满足了开闭原则,但是一个工厂只创建一个产品,这使得今后增加多个产品时需创建多个工厂。类的数量聚居膨胀。

3.Abstract Factory Pattern

在抽象工厂模式中优化了一下工厂方法模式。它考虑到了今后会扩展导致工厂巨增开销比较大的问题。

在抽象工厂模式中引入了一个产品族的概念。也就是说如果是一个产地的东西那么就由一个工厂去负责。并且一个工厂会有多个部门(方法)来负责每一个产品的创建。

模式的结构:

从模式的结构中可以看出。抽象工厂模式在工厂方法模式的基础上在ConcreteFactory中增加了多个createProduct的方法。

这样一来就不用增加一个产品时需加一个工厂了。但是抽象工厂也有很多问题例如他又不满足开闭原则了。 额~

一般用反射工厂模式,把包名+类名存到文件里然后通过反射去创建,例如:http://snowteng17.blog.51cto.com/1532294/330453

设计模式之Factory的更多相关文章

  1. 设计模式 工厂-Factory

    在开始笔记之前先推荐一个网站:http://design-patterns.readthedocs.org/zh_CN/latest/index.html 网站对每一个Pattern都有详尽的解说.并 ...

  2. [学习笔记]设计模式之Factory Method

    写在前面 为方便读者,本文已添加至索引: 设计模式 魔法手札索引 在上篇笔记Abstract Factory设计模式中,时の魔导士创建了一系列的FoodFactory,并教会了其中一名霍比特人theC ...

  3. 设计模式学习--Factory Method

    What Factory Method:定义一个创建对象的接口,让子类来决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Why Factory Method是一个比較基 ...

  4. 简单工厂设计模式(Simple Factory Design Pattern)

    [引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...

  5. 一天一个设计模式——Abstract Factory抽象工厂模式

    一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...

  6. 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明

    Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...

  7. 设计模式之Factory工厂模式的好处

    最最直观的好处就是吹牛逼,看着要比普通创建对象要屌 好看 一般情况下,我们创建对象使用的是new. Sample sample=new Sample(); 然而,实际情况会比这样复杂的多,比如说 Sa ...

  8. 设计模式之Factory模式 代码初见

    ObjectFactory就是通过Factory建造一个Object,比如说DBConnectionFactory就是专门建造DBConnection的工厂 BuilderFactory就是通过Fac ...

  9. 设计模式之Factory模式(C++)

    Factory模式具有两大重要的功能: (1).定义创建对象的接口,封装了对象的创建: (2).使具体化类工作延迟到了子类中. //Product.h #ifndef _PRODUCT_H_ #def ...

随机推荐

  1. 基于gulp的前端自动化开发构建

    就前端的发展而言会越来越朝着后端的标准化靠近,后端的工程化以及模块化都很成熟.基于这样一个思路,开始探索如何优化目前的开发流程.而使用的工具就是gulp. 个人觉得gulp比较webpack更为简单实 ...

  2. 【Docker 命令】- pull命令

    docker pull : 从镜像仓库中拉取或者更新指定镜像 语法 docker pull [OPTIONS] NAME[:TAG|@DIGEST] OPTIONS说明: -a :拉取所有 tagge ...

  3. C跟C++

    工作以来几乎就只写C,下周开始的新工作可能就要开始写C++啦~ C: C++: 1.template 2.多态.重载.继承 3.虚函数 C++内存布局 看两张耗子的图片就清楚了.其中虚函数表一般放在数 ...

  4. Oracle导数据到SQL server的方法总结

    通过oracle10g 访问sql server 2008 导数据步骤 最近在项目中遇到要将Oracle数据库的数据导入到SQL server数据库中,解决办法如下: 一.准备工作 配置Oracle ...

  5. AngularJS 中特性(attr)和属性(prop)的区别

    attr() 和 removeAttr() 方法是对特性进行处理的, 而 prop() 是对属性进行操作的 , 但是很多时候操作的东西是同一个 , 但是也是有区别的, 区别在于prop方法处理的是被 ...

  6. BZOJ 1875 HH去散步(矩阵快速幂)

    题意: 给定一张无向图,每条路的长度都是1,没有自环,可能有重边,给定起点与终点,求从起点走t步到达终点的方案数. 每一步走的时候要求不能走上一条刚刚走的路. 解析: 显然需要搞出个矩阵之后矩乘. 然 ...

  7. Oracle数据库中心双活之道:ASM vs VPLEX

    Oracle数据库中心双活之道:ASM vs VPLEX 来源 https://www.cnblogs.com/wenjiewang/p/7460212.html 双活方案对比:ASM vs V-PL ...

  8. C++中swap函数

    本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template<class T> voi ...

  9. sourcemap总结

    sourcemap在线上压缩文件调试中很重要,在此总结如下: 1. 开启sourcemap (1). 浏览器要开启source-map支持(2). 压缩文件底部要有source-map的URL,压缩要 ...

  10. ContestHunter暑假欢乐赛 SRM 04

    逃了一场SRM(躺 A题可以看成0点到1点,有p的几率从0到1,1-p几率不动,求0到1的期望步数.很显然概率是不降序列数/n!,然后列个方程E[0] = E[0] * (1 - p) + 1,解得E ...