java – 使用Enum或String作为静态工厂方法?
发布时间:2020-12-15 08:44:12 所属栏目:Java 来源:网络整理
导读:使用enum或String调度到正确的对象以在静态工厂方法中创建是否更好? 字符串示例: public static Car createCar(String carName){ if(carName.equals("Ferrari")){ return new Ferrari(); } else if(carName.equals("Porsche")){ return new Porsche(); } .
使用enum或String调度到正确的对象以在静态工厂方法中创建是否更好?
字符串示例: public static Car createCar(String carName){ if(carName.equals("Ferrari")){ return new Ferrari(); } else if(carName.equals("Porsche")){ return new Porsche(); } .... } 枚举示例: public static Car createCar(CarEnum carEnum){ if(CarEnum.FERRARI.equals(carEnum)){ return new Ferrari(); } else if(CarEnum.PORSCHE.equals(carEnum)){ return new Porsche(); } .... } 就目前而言,据我说: 使用枚举的好处: >避免用户使用未经处理的carName调用工厂. 使用Enum的缺点: 增加依赖性,因为更改为枚举(例如,FERRARI变为ENZO_FERRARI)将需要在客户端上进行修改.但是,使用String,我们可以将法拉利重定向到Enzo Ferrari实例,而无需重新编译客户端代码.当然,我们可以为客户端使用旧的枚举值和FERRARI重定向到ENZO-FERRARI枚举做同样的事情,但对我而言,它意味着枚举必须保留旧值以使客户端兼容……对我来说没有意义. 我想知道你对这个问题有什么看法? 解决方法
如果像在这种情况下那样,对方法有一定数量的可接受参数,那么最好在方法的客户端上尽可能地强制执行该约束.在这种情况下,接受任何旧字符串将导致比使用枚举更多的失败.
但是,在这种有限的情况下,您可能还会考虑为每种类型的汽车使用命名工厂方法:如createFerrari(),createPorsche()等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |