码迷,mamicode.com
首页 > 其他好文 > 详细

工厂模式的一点疑问

时间:2014-11-29 17:22:24      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   os   2014   问题   log   line   tt   

最近看了一下设计模式中的工厂模式,对于其中的工厂方法模式有一点疑问,在此记录,方便以后学习所需。

首先工厂模式是为了满足开闭原则:扩展开放,修改封闭。

对比一下简单工厂模式和工厂方法模式,会发现简单工厂模式中的createBMW()方法中包含的选择生成方法的switch语句,在工厂方法模式中的工厂类里没地方放,因此只能移交给客户,由客户来做switch。好了,那么问题来了(挖掘机哪家强?),在工厂方法中真的满足开闭原则吗?是的,工厂类和产品类满足,可是客户类呢?增加一个产品就必须到客户类里修改switch语句,这不是一样违反了修改封闭吗?这样的话还不如把switch语句拿出来再弄一个类,姑且先叫它choose类吧。这时候再仔细看工厂方法模式,假设,我们将工厂子类和产品子类合到一起,那么是不是和简单工厂模式有点像呢?事实上,为什么不可以合到一起呢?那么实际上工厂方法模式真的比简单工厂模式好吗?最多理解其增加了一个适配层。

盗用几张宝马案例的图片

简单工厂模式:

bubuko.com,布布扣

工厂方法模式:

bubuko.com,布布扣

抽象工厂模式:

bubuko.com,布布扣

下面再记录一下对抽象工厂模式的认识。

我的理解它也和工厂方法一样,应该把switch语句从客户类里抽出来。后面由于工厂子类还要选择多个产品来组合成目标产品,所以工厂子类还是有存在的必要的,这就像是二级客户了,本质上感觉有点像简单工厂里还有简单工厂。

工厂模式的一点疑问

标签:style   blog   http   os   2014   问题   log   line   tt   

原文地址:http://www.cnblogs.com/dixonyy/p/4131133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!