为什么简单工厂模式中,习惯在一个方法中写if-else?

为什么简单工厂模式中,习惯在一个方法中写if-else,而不是为每个产品写一个创建方法?但是在抽象工厂模式中,就不再采用if-else,而是为每个产品写了一个方法?

注意:大佬们,我不是在问他们的区别、优势、适用场景,注意审题哈。

阅读 3.2k
2 个回答

目的不一样,简单工厂模式适合用在产品种类相对少且不经常变的情况,抽象工厂模式适合用在产品种类多或者经常需要扩展的情况。

简单工厂的简单不是强调说使用 if 去做实例创建,而是它从头到尾只有 一个 类去负责这件事

抽象工厂则涉及 多个 工厂类,每个具体工厂负责一种产品族的创建。

从设计上来说,抽象工厂如果需要添加新的产品族,只需要增加新的具体工厂,既不需要修改已有的工厂类,也不需要修改客户端代码(但是如果用简单工厂你就不得不再加个条件判断,修改那个类,违反了 “开放关闭原则”)

虽然都要拓展额外的代码,但是前者需要改动已有代码,而后者只需要新增,相对来说 耦合度降低

补充

其实题主的疑问点也可以从上面答案看出

简单工厂 不关心 具体的工厂,所以在一个工厂类中就行,再进一步说,什么结构能在一个类中进行流程控制呢?很显然 if 是最简单的方式,当然 switchternary 也都能做到,简单工厂也没有说必须用 if 去实现

对于抽象工厂,要求每个产品族 对应 一个工厂,显而易见上面的三种语句 不能 实现,自然会选择其他方式去实现了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进