【发布时间】:2019-02-15 03:18:14
【问题描述】:
我的目标是根据枚举返回一个方法。目前,我创建了一个工厂,但它使用的是我不喜欢的开关盒。代码运行良好,但我想使用更好的模式并替换当前的开关盒。如果没有任何开关盒或 if else (instance of),您将如何设计它...
我还尝试在枚举中实现 Stategy 模式。但是自动装配 bean 是不可能的。
请看下面我当前的一段代码。
public enum Car {
AUDI, FORD;
}
public class SuperCar{
private Car car;
}
public class Audi extends SuperCar{
// some other properties
}
public class Ford extends SuperCar{
// some other properties
}
@Service
public class AudiService{
public void save(Audi audi){
// some code
}
}
@Service
public class FordService{
public void save(Ford ford){
// some code
}
}
@Service
public class CarFactory{
private FordService fordService;
private AudiService audiService;
public CarFactory(FordService fordService, AudiService audiService) {
this.fordService = fordService;
this.audiService = AudiService;
}
public void saveCar(SuperCar superCar){
switch(superCar.getCar()):
case AUDI:
return audiService.save((Audi)superCar));
case FORD:
return fordService.save((Ford)superCar));
default:
return null;
}
}
感谢您的帮助。
【问题讨论】:
-
switch有什么问题?你说的更好是什么意思?您使用什么标准? -
我不喜欢使用 switch,因为当其他开发人员添加新枚举时,他通常会忘记实现所有 switch 模式。我使用它们,但最好避免使用它们
-
没有解决这个问题的模式。我建议您创建通过
Car.values()迭代的测试并调用您的工厂方法。 -
您可以只抛出一个异常,说明不支持新添加的枚举以知道您的工厂中缺少代码行
-
我已经这样做了。我只是想改进我的代码并使用所有开关盒。但我期待这个答案。我已经在互联网上到处搜索了。
标签: java spring switch-statement case factory