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