实现多个小班的最佳方式?

时间:2014-05-06 22:06:00

标签: java

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

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

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

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

3 个答案:

答案 0 :(得分:0)

我喜欢你用一个代表每个命令的类的方法,它实际上非常聪明。也许你不知道这一点,但你正在触及State Pattern的关键方面,这就是我将用于此类问题的方法。

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

答案 1 :(得分:0)

我认为您还可以使用enum来表示各种命令,其中枚举实现了一个接口,因此每个枚举实例都必须实现"命令"方法,无论你想要什么(doIt(),run()等)。

像这样:Why would an Enum implement an Interface?

答案 2 :(得分:-1)

另一种方法是创建一个Command类,并为每个命令/函数提供一个公共内部类。这样您就不需要为每个命令创建单独的.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<String, InnerInterface>将String命令映射到您希望根据输入运行的特定命令,确保在其他位置填充HashMap(可能在您的Command类中)。然后,您只需要执行以下操作,而不是使用开关案例:

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

然后只需要调用commandInterface.executeCommand();