工厂模式之我见
2015-09-17 23:18
267 查看
实质:
工厂模式是将对象的创建嫁祸给工厂类, 降低对象之间的耦合。
使用实例:
1、简单工厂---也叫静态工厂
其精髓在于静态:当需要创建新对象时,只需通过静态方法直接调用创建即可,没有了工厂类,目标对象的创建。这也就形成了对原创建逻辑的重组与优化。
调用时直接调用ServiceFactory.CreateService().Summit();从而在实现业务时无需显示的创建工厂或者实例对象。
其弊端则是当新增一种服务时,工厂类则需要进行改动,相当于影响到已有的代码,不符合开闭原则。
2、工厂方法模式与抽象工厂模式。
为什么我要将他们放在一起呢?因为我觉得他们的精髓是一致的-----在于降低模块之间的耦合(注意是模块之间,如果是同一模块则没有多大意义了)
Uml描述:
工厂方法
![](http://images2015.cnblogs.com/blog/340430/201509/340430-20150918001039195-2009503203.png)
抽象工厂模式
![](http://images2015.cnblogs.com/blog/340430/201509/340430-20150918001740242-1965556492.png)
然后再看一下模块关系图
![](http://images2015.cnblogs.com/blog/340430/201509/340430-20150918002838086-109240061.png)
代码略。工厂方法和抽象工厂在用于分层时,层级之间的调用显示出其应用的威力。当然他们的应用更多的是考虑开闭原则(扩展开放而修改关闭---简单工厂的缺陷)程序设计原则,
综述:
曾经一直执着于工厂模式是将对象的创建变成了工厂的创建,再由工厂类来创建实际的对象。想了好久都没能理解,很多blog上也是将其实例的发出来,但我却没能理解工厂模式的真谛,谨以此记下自己的理解。
工厂模式基于对代码的提炼和重构,将对象之间强创建抽象成方法、引用的高度,实现松耦合,及精简了代码,也让代码更加优美。
工厂模式是将对象的创建嫁祸给工厂类, 降低对象之间的耦合。
使用实例:
1、简单工厂---也叫静态工厂
其精髓在于静态:当需要创建新对象时,只需通过静态方法直接调用创建即可,没有了工厂类,目标对象的创建。这也就形成了对原创建逻辑的重组与优化。
public interface IService { bool Summit(); } public class NormalOrderService : IService { public bool Summit() { //TODO summit the normal order return false; } } public class ApplyOrderService : IService { void CreateOrder(); public bool Summit() { CreateOrder(); //TODO summit the apply order return false; } } public class BookOrderService : IService { bool CheckDate(DateTime time); public bool Summit() { if (CheckDate(DateTime.Now)) { //TODO Summit the bookOrder return true; } else { return false; } } } public class ServiceFactory { public static IService CreateService(string orderType) { switch (orderType) { case "Normal": return new NormalOrderService(); case "Apply": return new ApplyOrderService(); case "Book": return new BookOrderService(); default: return null; } } }
调用时直接调用ServiceFactory.CreateService().Summit();从而在实现业务时无需显示的创建工厂或者实例对象。
其弊端则是当新增一种服务时,工厂类则需要进行改动,相当于影响到已有的代码,不符合开闭原则。
2、工厂方法模式与抽象工厂模式。
为什么我要将他们放在一起呢?因为我觉得他们的精髓是一致的-----在于降低模块之间的耦合(注意是模块之间,如果是同一模块则没有多大意义了)
Uml描述:
工厂方法
![](http://images2015.cnblogs.com/blog/340430/201509/340430-20150918001039195-2009503203.png)
抽象工厂模式
![](http://images2015.cnblogs.com/blog/340430/201509/340430-20150918001740242-1965556492.png)
然后再看一下模块关系图
![](http://images2015.cnblogs.com/blog/340430/201509/340430-20150918002838086-109240061.png)
代码略。工厂方法和抽象工厂在用于分层时,层级之间的调用显示出其应用的威力。当然他们的应用更多的是考虑开闭原则(扩展开放而修改关闭---简单工厂的缺陷)程序设计原则,
综述:
曾经一直执着于工厂模式是将对象的创建变成了工厂的创建,再由工厂类来创建实际的对象。想了好久都没能理解,很多blog上也是将其实例的发出来,但我却没能理解工厂模式的真谛,谨以此记下自己的理解。
工厂模式基于对代码的提炼和重构,将对象之间强创建抽象成方法、引用的高度,实现松耦合,及精简了代码,也让代码更加优美。
相关文章推荐
- Node类源代码不完全分析
- SQL Server中的三种物理连接图文解析:Loop Join,Merge Join,Hash Join
- 10个实用的但偏执的Java编程技术
- 转载】Maven + SVN + Hudson 自动编译、部署、发布
- const在函数前与函数后的区别
- @dynamic关键字
- Java 里把 InputStream 转换成 String 的几种方法
- Android 绘图进阶:Canvas绘制联系人侧滑列表(drawText+监听者模式)
- 写给新人数据挖掘基础知识介绍
- springMVC的@RequestMapping
- python面向对象
- Android学习——Frame动画、Shape动画
- UI树
- Java记录 -35- System类解析
- CSS 水平垂直居中 方法一
- vm虚拟机本地连接已连接上 但为什么上不去网
- selenium常用的js总结
- T-SQL查询进阶--详解公用表表达式(CTE)
- 第一百六十八天 how can I 坚持
- vm虚拟机本地连接已连接上 但为什么上不去网