Java 实现多个小型类的最佳方法?

Java 实现多个小型类的最佳方法?,java,Java,因此,我将描述我的问题。用户输入一个命令。我需要处理该命令并相应地运行特定函数 我使用switch语句查找用户输入的命令,但我认为它变得相当混乱。我应该继续使用这种方法吗 我决定为每个可能的命令创建一个类,将它们放入一个数组中,并使用循环来检查是否有任何命令适合并调用存储在该命令对象中的函数,而不是switch语句。目前,我已经实现了大约10个命令,但数量还会增加 为每个新的命令类创建一个新文件看起来真的很麻烦而且可能很混乱,所以我想知道是否有更好的方法来实现我想要的,或者是否有更好的方法来实现

因此,我将描述我的问题。用户输入一个命令。我需要处理该命令并相应地运行特定函数

我使用switch语句查找用户输入的命令,但我认为它变得相当混乱。我应该继续使用这种方法吗

我决定为每个可能的命令创建一个类,将它们放入一个数组中,并使用循环来检查是否有任何命令适合并调用存储在该命令对象中的函数,而不是switch语句。目前,我已经实现了大约10个命令,但数量还会增加


为每个新的命令类创建一个新文件看起来真的很麻烦而且可能很混乱,所以我想知道是否有更好的方法来实现我想要的,或者是否有更好的方法来实现所有内容

我喜欢使用类来表示每个命令的方法,它实际上非常聪明。也许你们们不知道这一点,但你们们正在讨论的是问题的关键方面,这正是我用来解决这类问题的方法


因此,您可以保留您的代码,或者使用状态模式实现更复杂但更灵活的代码版本。

我认为您还可以使用
enum
来表示各种命令,其中enum实现一个接口,因此每个enum实例都必须实现“command”方法,不管你想叫它什么(doIt(),run(),等等)


如下所示:

另一种方法是创建一个命令类,并为每个命令/函数创建一个公共内部类。这样,您就不需要为每个命令创建单独的.java文件,您可以通过command.FirstCommand等单独使用每个命令

至于尝试不使用switch case来确定需要调用什么命令,请查看下面的示例代码:

public class Command {
    class InnerCommand implements InnerInterface {
        // implement execute command
    }

    class AnotherInnerCOmmand implements InnerInterface {
        // implement execute command
    }

    interface InnerInterface {
        void executeCommand();
    }
}
可以使用
HashMap
将字符串命令映射到要基于输入运行的特定命令,请确保在其他位置(可能在命令类中)填充HashMap。然后,您不需要使用开关盒,只需执行以下操作:

public static void doCommand(String commandString) {
    HashMap<String, InnerInterface> commandsMap = new HashMap<String, Command.InnerInterface>();
    InnerInterface commandInterface = commandsMap.get(commandString);
}
publicstaticvoiddocomand(stringcommandstring){
HashMap commandsMap=新的HashMap();
InnerInterface commandInterface=commandsMap.get(commandString);
}

然后只需调用
commandInterface.executeCommand()

也许您需要一个命令类,其中包含一个表示该命令的
String
类型的字段。也许这个类有一些方法可以将其写入文件。你的问题和标题似乎不相关,也许可以考虑一个不同的标题来更好地反映这个问题?我认为这个问题很好,标题也很好。无需代码。hashmap可以将密钥与对象配对(就像字符串与运行命令的对象配对)。我发现,对于这种事情,另一种方法是创建一个命令类,并为每个命令/函数创建一个公共内部类。通过这种方式,您不需要为每个命令创建单独的.java文件,并且可以通过command.FirstCommand等单独使用每个命令。我看不出这与状态模式有什么关系。它只是根据用户输入的内容执行X或Y。状态模式的主要用途是什么?也要等到有人推荐一个
enum
,它会更明显。我对OPs问题的看法是:用户输入命令,用户进入一段代码,从而进入一种状态。执行某些代码与处于一种状态不同。如果是这样的话,每一个程序都会实现状态模式,我没有说“执行一些代码”,我说的是进入代码的一部分。在这一点上,许多计划受益于FSM。您是否也看到了另一个关于
enums
的答案,这是一个奇怪的预测。每个命令都应该知道自己的名称(多个名称)。我对Java中的枚举没有太多的经验,所以我不得不问,是否有可能以这样的方式实现这个枚举:这个枚举的每个实例都会存储一个名称列表,有一个方法来检查字符串是否与其中一个名称匹配,还有一个方法来运行命令?很抱歉用这些基本的东西打扰您。您可以尝试以下模式:基本思想是,如果您将枚举命名为与正在输入的命令相同的名称,那么您可以说
CommandEnum.valueOf(command.run()