很多人学设计模式时,一上来就看到“简单工厂模式”,代码写得挺清爽,比如一个 CarFactory 类,传个字符串参数就能造出宝马、奔驰或比亚迪——用着顺手,文档里也常出现。于是自然会问:它算不算GoF那本《设计模式》里说的23种经典模式之一?
答案很直接:不算。
GoF(Gang of Four)1994年出版的《Design Patterns》明确列出了23种设计模式,分为创建型、结构型和行为型三类。其中创建型有5种:单例、工厂方法、抽象工厂、建造者、原型。注意,里面没有“简单工厂”。
它之所以叫“简单工厂”,恰恰是因为它不够“模式化”——不符合设计模式的几条隐性门槛:比如它不是对对象创建问题的通用解,也不强调开闭原则(增加新车型就得改工厂类),更没被GoF正式收录为独立模式。
但它真没用吗?
完全不是。它就像炒菜时的蒜末,不单独上桌,但提香效果一流。很多项目初期用简单工厂快速搭起对象创建骨架,等车型越来越多、品牌逻辑越来越重,再升级成“工厂方法”或“抽象工厂”。举个接地气的例子:
public class SimpleCarFactory {
public static Car createCar(String type) {
if ("bmw".equals(type)) {
return new Bmw();
} else if ("benz".equals(type)) {
return new Benz();
} else if ("byd".equals(type)) {
return new Byd();
}
return null;
}
}这段代码清晰、易懂、好调试,新手三天就能上手。但一旦要加鸿蒙智行、小米SU7,就得打开这个类反复改 if-else——这就暴露了它的局限。
那它和“工厂方法模式”差在哪?
关键在“谁来决定怎么造”。简单工厂把所有逻辑塞进一个静态方法;工厂方法则把创建动作下放给子类,比如让 BmwFactory 自己管宝马,BydFactory 自己管比亚迪,新增车型只用加新工厂类,原代码一动不动。
所以别纠结“它是不是23种”,而要想:“我现在需要的是快速验证,还是长期可扩展?”——选对工具,比背名单重要得多。