工厂喜欢带有弹簧豆的图案,没有开关盒

Tho*_*rge 5 java spring factory case switch-statement

我的目标是根据枚举返回一个方法.目前,我已经创建了一个工厂,但它使用的是我不喜欢的开关盒.代码工作正常但我想使用更好的模式并替换当前的开关案例.你如何设计这个没有任何开关案例或如果否则(实例)......

我还试图在枚举中实现一个Stategy模式.但是无法自动装配bean.

请参阅下面的我目前的代码.

public enum Car {
     AUDI, FORD;
}
Run Code Online (Sandbox Code Playgroud)
public class SuperCar{
     private Car car;
}
Run Code Online (Sandbox Code Playgroud)
public class Audi extends SuperCar{
     // some other properties
}
Run Code Online (Sandbox Code Playgroud)
public class Ford extends SuperCar{
     // some other properties
}
Run Code Online (Sandbox Code Playgroud)
@Service
public class AudiService{

     public void save(Audi audi){
         // some code
     }

}
Run Code Online (Sandbox Code Playgroud)
@Service
public class FordService{

     public void save(Ford ford){
         // some code
     }

}
Run Code Online (Sandbox Code Playgroud)
@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;

     }

}
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助.

kri*_*hna 0

很抱歉我无法发表评论。这里汽车的类型决定了汽车服务。我不确定策略模式是否适合这里。当同一辆车不同的服务行为时,我会使用策略模式。例如:在夏天我想使用XService,在冬天我想对AUDI使用YService。我看到有两种方法可以实现这一点。

  1. 在创建汽车对象期间注入服务。通过这种实现,汽车与服务紧密结合。我不建议这样做,除非您有充分的理由不遵循第 2 点。
  2. 使用 if/else 或分支来确定汽车的类型并调用所需的服务。