最近看了一下设计模式中的工厂模式,对于其中的工厂方法模式有一点疑问,在此记录,方便以后学习所需。
首先工厂模式是为了满足开闭原则:扩展开放,修改封闭。
对比一下简单工厂模式和工厂方法模式,会发现简单工厂模式中的createBMW()方法中包含的选择生成方法的switch语句,在工厂方法模式中的工厂类里没地方放,因此只能移交给客户,由客户来做switch。好了,那么问题来了(挖掘机哪家强?),在工厂方法中真的满足开闭原则吗?是的,工厂类和产品类满足,可是客户类呢?增加一个产品就必须到客户类里修改switch语句,这不是一样违反了修改封闭吗?这样的话还不如把switch语句拿出来再弄一个类,姑且先叫它choose类吧。这时候再仔细看工厂方法模式,假设,我们将工厂子类和产品子类合到一起,那么是不是和简单工厂模式有点像呢?事实上,为什么不可以合到一起呢?那么实际上工厂方法模式真的比简单工厂模式好吗?最多理解其增加了一个适配层。
盗用几张宝马案例的图片
简单工厂模式:
工厂方法模式:
抽象工厂模式:
下面再记录一下对抽象工厂模式的认识。
我的理解它也和工厂方法一样,应该把switch语句从客户类里抽出来。后面由于工厂子类还要选择多个产品来组合成目标产品,所以工厂子类还是有存在的必要的,这就像是二级客户了,本质上感觉有点像简单工厂里还有简单工厂。
时间: 2024-09-27 17:49:34