设计模式之Factory
设计模式总共有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的更多相关文章
- 设计模式 工厂-Factory
在开始笔记之前先推荐一个网站:http://design-patterns.readthedocs.org/zh_CN/latest/index.html 网站对每一个Pattern都有详尽的解说.并 ...
- [学习笔记]设计模式之Factory Method
写在前面 为方便读者,本文已添加至索引: 设计模式 魔法手札索引 在上篇笔记Abstract Factory设计模式中,时の魔导士创建了一系列的FoodFactory,并教会了其中一名霍比特人theC ...
- 设计模式学习--Factory Method
What Factory Method:定义一个创建对象的接口,让子类来决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Why Factory Method是一个比較基 ...
- 简单工厂设计模式(Simple Factory Design Pattern)
[引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明
Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...
- 设计模式之Factory工厂模式的好处
最最直观的好处就是吹牛逼,看着要比普通创建对象要屌 好看 一般情况下,我们创建对象使用的是new. Sample sample=new Sample(); 然而,实际情况会比这样复杂的多,比如说 Sa ...
- 设计模式之Factory模式 代码初见
ObjectFactory就是通过Factory建造一个Object,比如说DBConnectionFactory就是专门建造DBConnection的工厂 BuilderFactory就是通过Fac ...
- 设计模式之Factory模式(C++)
Factory模式具有两大重要的功能: (1).定义创建对象的接口,封装了对象的创建: (2).使具体化类工作延迟到了子类中. //Product.h #ifndef _PRODUCT_H_ #def ...
随机推荐
- centos 安装mod_wsgi
如果自定义升级过了python到2.7 #./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/python27/bin/py ...
- 微信支付java
直接上代码: 1.支付配置PayCommonUtil import com.legendshop.payment.tenpay.util.MD5Util; import com.legendshop. ...
- [Leetcode] 2.Add Two Numbers(List To Long,模拟)
本题题意是指将两个数倒序存储在链表中,再将两数之和同样存储在链表中输出. 我最开始的思路是将每一位相加,再考虑是否进位,但这时就需要考虑一些情况,比较麻烦. 于是我决定采取另一种在网上新学到的方法:这 ...
- asp.net mvc4使用log4.net 日志功能
对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在. 下面演示网站 出错后自动添加出错日志的实例 (1)新建一个WebApplicatio ...
- Dom-直接 /间接选择器
Dom:Document Object Model的缩写, 把html转换成了文本对象. 1. 直接选择器 1.直接查找 document.getElementById 根据ID获取一个标签 docu ...
- Oracle 分页、取期间数据、TOP前几
Oracle没有 sqlserver的 top number 功能.只能以期间的形式实现 代码实现分页,参数curPage 当前页.pageSize 每页行数,计算出起始结束页码 int startP ...
- 【题解】Atcoder AGC#01 E-BBQ Hard
计数题萌萌哒~ 这道题其实就是统计 \(\sum_{i=1}^{n}\sum_{j=i+1}^{n}C\binom{a[i] + a[j]}{a[i] + a[j] + b[i] + b[j]}\) ...
- bzoj 2140: 稳定婚姻 (二分图)
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- 【ST表】【模板】ST表
Definition ST表是一种用于处理静态RMQ问题(无修改区间最值问题)的最快数据结构,书写方便使用简单效率便捷.其中其预处理复杂度为O(nlogn),查询复杂度为O(1).总时间复杂度为O(n ...
- 使用snmp4j实现Snmp功能(三)
相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) 前两篇文章讲了如何使用Snmp4j实现Set.Get(使用 ...