我有一个休息端点,根据Enum值,我调用特定服务的方法。所有服务都在同一抽象类之后扩展。
public abstract class BaseService{
someMethod()
}
public class ServiceA extends BaseService{
@Override
someMethod()
}
public class ServiceB extends BaseService{
@Override
someMethod()
}
public class RestEndpoint {
@Inject
ServiceA serviceA
@Inject
ServiceB serviceB
public void someEndpoint(Enum value){
switch (value){
case 1:
serviceA.someMethod();
case 2:
serviceB.someMethod();
}
}
}
问题是,可能会有更多的服务,我想知道是否有更好的方法。我考虑过实施战略模式,但是我不知道这是否不是“大材小用”,因为最多会有约10/15的服务。
编辑
因此,因为我的服务是bean,并且在其中注入了其他bean,所以没有任何“简便”的方法来重构它-我无法在Enum类中创建某些方法,例如
return new ServiceA()
,因为然后在实例将不会被注入。我可以尝试获取上下文并设置特定的bean,但是这样做并不安全(例如,您可以尝试注入非bean,而编译器不会让您知道它)。因此,如果我的
ServiceA
实现不使用其他bean,最简单的方法是在Enum类中创建方法public abstract BaseService getService();
并像这样实现
anyServiceA{
@Override
public BaseService getService(){
return new ServiceA();
}
}
在休息服务中,只需拨打
BaseService
也许会帮助某人。
最佳答案
通常,有7种重构switch语句的方法可用(可能更多:)。
1) Implementing the Strategy Pattern via Java Enum
2) Implementing the Command Pattern
3) Using the Java 8+ Supplier
4) Defining a Custom Functional Interface
5) Relying on Abstract Factory
6) Implementing State Pattern
7) Implementing via Predicate
您可以参考此链接进行实施
https://www.developer.com/java/data/seven-ways-to-refactor-java-switch-statements.html
希望这可以帮到你。
关于java - 如何重构多个switch语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57087694/