我有一个休息端点,根据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/

10-15 15:45