Java 如何避免许多';如果';s';并在执行时提供运行时参数

Java 如何避免许多';如果';s';并在执行时提供运行时参数,java,spring,design-patterns,architecture,Java,Spring,Design Patterns,Architecture,我试图避免大量的if,并使用OOP方式执行不同的执行。执行由我在运行时从API获取的操作整数决定 我想到了命令模式,它看起来是这样的: 我在Spring配置上创建了一个hashmap: @Bean public HashMap<Integer, Command> hashmapCommands() { HashMap<Integer, Command> supportedCommands = new HashMap<

我试图避免大量的
if
,并使用OOP方式执行不同的执行。执行由我在运行时从API获取的操作整数决定

我想到了命令模式,它看起来是这样的:

我在Spring配置上创建了一个hashmap:

      @Bean
        public HashMap<Integer, Command> hashmapCommands() {
            HashMap<Integer, Command> supportedCommands = new HashMap<>();
            supportedCommands.put(command.action.getId(), myCommand());
            ..
    }

  @Bean
    public Command MyCommand() {
        return new myCommand();
    }


public class MyCommand implements Command {

    public final static ACTION action = 1;
   @Override
    public void execute(String runTimeData) {
      //doSomeLogic
    }

}
@Bean
公共HashMap hashmapCommands(){
HashMap supportedCommands=新建HashMap();
supportedCommands.put(command.action.getId(),myCommand());
..
}
@豆子
公共命令MyCommand(){
返回新的myCommand();
}
公共类MyCommand实现命令{
公共最终静态作用=1;
@凌驾
public void execute(字符串运行时数据){
//doSomeLogic
}
}
现在,在我的案例的其他地方,我正在注入hashmapCommands:

在inoker类上:

public class TestCommands(){
..
 supportedCommands = (HashMap<Integer, Command>) context.getBean("hashmapCommands");
...

public void someTest(){
 Command myCommand = supportedCommands.get(1);
 reportCommandBase.execute("some runtimeMessage");
}
public类TestCommands(){
..
supportedCommands=(HashMap)context.getBean(“hashmapCommands”);
...
公共测试(){
Command myCommand=supportedCommands.get(1);
reportCommandBase.execute(“一些运行时消息”);
}
我在execution()中有参数使用命令模式是错误的

正如您所看到的,我必须发送运行时消息并避免使用从hashmap检索命令执行的if语句,但我需要发送仅在运行时获取的param


Mybe我正在对我的案例强制命令模式?其他建议?

请澄清“但我需要发送仅在运行时获得的参数”。这意味着什么?这些参数从何而来?为什么命令本身没有获得它所需的参数?我发送给命令的运行时消息是从客户端检索的。我无法以高级方式填充它。我必须在MyCommand execute()上使用它logici有一个消息侦听器,它可以获取客户端调用,并且侦听器可以根据api操作类型调用不同的命令。因此,请将侦听器中接收到的消息传递给您的命令。有什么问题吗?然后不要调用该命令,而是调用其他命令。您将拥有一些可以满足您需要的功能,工作正常,并且不是唯一的功能命令模式。请澄清“但我需要发送仅在运行时获取的参数”。这意味着什么?这些参数从何而来?为什么命令本身没有获得它所需的参数?我发送给命令的运行时消息是从客户端检索的。我无法以高级方式填充它。我必须在MyCommand execute()上使用它logici有一个消息侦听器,它可以获取客户端调用,并且侦听器可以根据api操作类型调用不同的命令。因此,请将侦听器中接收到的消息传递给您的命令。有什么问题吗?然后不要调用该命令,而是调用其他命令。您将拥有一些可以满足您需要的功能,工作正常,并且不是唯一的功能命令模式。