为什么简单工厂模式中,习惯在一个方法中写if-else,而不是为每个产品写一个创建方法?但是在抽象工厂模式中,就不再采用if-else,而是为每个产品写了一个方法?
注意:大佬们,我不是在问他们的区别、优势、适用场景,注意审题哈。
为什么简单工厂模式中,习惯在一个方法中写if-else,而不是为每个产品写一个创建方法?但是在抽象工厂模式中,就不再采用if-else,而是为每个产品写了一个方法?
注意:大佬们,我不是在问他们的区别、优势、适用场景,注意审题哈。
简单工厂的简单不是强调说使用 if
去做实例创建,而是它从头到尾只有 一个 类去负责这件事
抽象工厂则涉及 多个 工厂类,每个具体工厂负责一种产品族的创建。
从设计上来说,抽象工厂如果需要添加新的产品族,只需要增加新的具体工厂,既不需要修改已有的工厂类,也不需要修改客户端代码(但是如果用简单工厂你就不得不再加个条件判断,修改那个类,违反了 “开放关闭原则”)
虽然都要拓展额外的代码,但是前者需要改动已有代码,而后者只需要新增,相对来说 耦合度降低 了
其实题主的疑问点也可以从上面答案看出
简单工厂 不关心 具体的工厂,所以在一个工厂类中就行,再进一步说,什么结构能在一个类中进行流程控制呢?很显然 if
是最简单的方式,当然 switch
、 ternary
也都能做到,简单工厂也没有说必须用 if
去实现
对于抽象工厂,要求每个产品族 对应 一个工厂,显而易见上面的三种语句 不能 实现,自然会选择其他方式去实现了
目的不一样,简单工厂模式适合用在产品种类相对少且不经常变的情况,抽象工厂模式适合用在产品种类多或者经常需要扩展的情况。