Mik*_*378 5 java enums design-patterns factory static-factory
使用enum或String分派到正确的对象以在static工厂方法中创建更好吗?
示例String:
public static Car createCar(String carName){
if(carName.equals("Ferrari")){
return new Ferrari();
}
else if(carName.equals("Porsche")){
return new Porsche();
}
....
}
Run Code Online (Sandbox Code Playgroud)
示例enum:
public static Car createCar(CarEnum carEnum){
if(CarEnum.FERRARI.equals(carEnum)){
return new Ferrari();
}
else if(CarEnum.PORSCHE.equals(carEnum)){
return new Porsche();
}
....
}
Run Code Online (Sandbox Code Playgroud)
目前,据我所知:
使用的好处enum:
carName.使用的缺点Enum:
增加依赖项,因为更改为enum(例如FERRARI变成ENZO_FERRARI)将需要在客户端上进行修改。但是,String我们可以Ferrari在Enzo Ferrari不重新编译客户端代码的情况下重定向到实例。当然,我们可以使用enum重定向FERRARI到的旧值为客户端做同样的事情,ENZO-FERRARI enum但对我来说,这意味着enum必须保留旧值以使客户端兼容......对我来说没有意义。
我想知道您对这个问题有什么看法?
如果像在本例中所做的那样,某个方法有固定数量的可接受参数,那么最好在该方法的客户端上尽可能地强制执行该约束。在这种情况下,接受任何旧字符串都会比使用枚举导致更多的失败。
但是,在像这样的有限情况下,您也可以考虑为每种类型的汽车使用命名工厂方法:例如 createFerrari()、createPorsche() 等。