在 static
工厂方法中使用 enum
或 String
分配到正确的对象以创建更好吗?
String
示例:
public static Car createCar(String carName){
if(carName.equals("Ferrari")){
return new Ferrari();
}
else if(carName.equals("Porsche")){
return new Porsche();
}
....
}
enum
示例:
public static Car createCar(CarEnum carEnum){
if(CarEnum.FERRARI.equals(carEnum)){
return new Ferrari();
}
else if(CarEnum.PORSCHE.equals(carEnum)){
return new Porsche();
}
....
}
目前,据我所知:
使用 enum
的好处:
- 避免用户使用未处理的
carName
调用工厂。
使用 Enum
的缺点:
增加依赖性,因为对 enum
的更改(例如,FERRARI
变为 ENZO_FERRARI
)将需要在客户端进行修改。但是,使用 String
我们可以将 Ferrari
重定向到 Enzo Ferrari
实例,而无需重新编译客户端代码。当然,我们可以为使用旧 enum
值的客户端做同样的事情,并将 FERRARI
重定向到 ENZO-FERRARI
enum
但对我而言,这意味着 enum
必须保留旧值以使客户端兼容...对我来说没有意义。
我想知道你对这个问题有什么看法?
最佳答案
如果像您在这种情况下所做的那样,您有固定数量的方法可接受的参数,那么最好在方法的客户端上尽可能地强制执行该约束。在这种情况下,接受任何旧字符串会比使用枚举导致更多的失败。
但是,在像这样的有限情况下,您也可以考虑为每种类型的汽车使用命名工厂方法:如 createFerrari()、createPorsche() 等。
关于java - 将 Enum 或 String 用于静态工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703061/