我的目标是根据枚举返回一个方法。目前,我已经创建了一个工厂,但是它使用的是我不喜欢的开关盒。代码工作正常,但我想使用更好的模式并替换当前的开关盒。在没有任何开关盒的情况下,或者在其他情况下(例如),您将如何设计它?
我也尝试在枚举中实现Stategy模式。但是无法自动装配bean。
请参阅下面的当前代码。
{'GET': {'GREEN': 2}, 'POST': {'GREEN': 2}, 'Query': {'GREEN': 1, 'RED': 1}, 'Cookie': {'RED': 2}, 'String': {'RED': 2}, 'Body': {'BLUE': 2}}
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
}
}
感谢您的帮助。
答案 0 :(得分:0)
对不起,我无法发表评论。在这里,汽车的类型决定了汽车的服务。我不确定策略模式是否适合这里。当同一辆车出现不同的服务行为时,我将使用策略模式。例如:夏季我想使用 XService ,而冬季我想对 AUDI 使用 YService 。我看到两种实现方法。
答案 1 :(得分:0)
在仅替换switch
的情况下,我总是更喜欢使用map
来声明性更强的方法,因为它易于维护和阅读:
private Map<Car, CarService> services;
public CarFactory(FordService fordService, AudiService audiService) {
this.services = Map.of(Car.FORD, fordService, Car.AUDI, audiService);
}
public void saveCar(SuperCar superCar) {
CarService service = services.get(superCar.getCar());
if (service != null) service.save(..);
}
具有通用接口:
private interface CarService<T extends SuperCar> {
void save(T car);
}
无论如何,我会重新考虑您的对象模型,让超级跑车自行保存(正如其他人已经提出的那样。)