Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重构多个开关状态_Java_Design Patterns_Refactoring - Fatal编程技术网

Java 如何重构多个开关状态

Java 如何重构多个开关状态,java,design-patterns,refactoring,Java,Design Patterns,Refactoring,我有一个rest端点,根据枚举值调用特定服务的方法。所有服务都在同一抽象类之后扩展 public abstract class BaseService{ someMethod() } 问题是,可能会有更多的服务,我想知道是否有更好的方法。我曾考虑过实施策略模式,但我不知道这是否是“过火”,因为最多会有10/15个服务 编辑 因为我的服务是bean,在其中注入了其他bean,所以没有任何“简单”的方法来重构它-我无法在枚举类中创建一些方法,例如返回新的ServiceA(),因为这样我的Ser

我有一个rest端点,根据枚举值调用特定服务的方法。所有服务都在同一抽象类之后扩展

public abstract class BaseService{
  someMethod()
}
问题是,可能会有更多的服务,我想知道是否有更好的方法。我曾考虑过实施策略模式,但我不知道这是否是“过火”,因为最多会有10/15个服务

编辑

因为我的服务是bean,在其中注入了其他bean,所以没有任何“简单”的方法来重构它-我无法在枚举类中创建一些方法,例如
返回新的ServiceA()
,因为这样我的
ServiceA
实例中的bean就不会被注入。我可以尝试获取上下文,并设置特定的bean,但这样做是不安全的(例如,您可以尝试注入非bean,而编译器不会让您知道)

所以,如果我的
BaseService
实现不使用其他bean,最简单的方法就是在Enum类中创建方法

public abstract BaseService getService();
然后像这样实现

anyServiceA{
 @Override
 public BaseService getService(){
  return new ServiceA();
 }
}
在Rest服务中,只需调用
value.getService().someMethod()


也许它会帮助别人

通常,有7种方法可以重构switch语句(可能不止这些:))

您可以参考此链接进行实现


希望这能对您有所帮助。

一般来说,重构switch语句的方法有7种(可能不止这些:))

您可以参考此链接进行实现


希望这能对你有所帮助。

必须阅读:

必须阅读:

你的逻辑中唯一真正的问题是你忘记了中断语句。顺便说一句:
case
不会因为
枚举而飞行。
这只是一个代码示例,我知道中断,这个案例不起作用,但是谢谢你,你的逻辑中唯一真正的问题是你忘记了中断语句。顺便说一句:
case
不会以
value
作为
Enum
飞行……这只是一个代码示例,我知道中断,这种情况不起作用,但谢谢你
public class RestEndpoint {
  @Inject
  ServiceA serviceA
  @Inject
  ServiceB serviceB

  public void someEndpoint(Enum value){
    switch (value){
    case 1:
       serviceA.someMethod();
    case 2:
       serviceB.someMethod();
   }
  }
}
public abstract BaseService getService();
anyServiceA{
 @Override
 public BaseService getService(){
  return new ServiceA();
 }
}
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