繁体   English   中英

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

[英]Best way to implement multiple small classes?

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

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

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

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

我喜欢让您的类代表每个命令的方法,它实际上非常聪明。 也许您不知道这一点,但是您正在涉及状态模式的关键方面,这就是我要使用的这种类型的问题。

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

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

像这样: 为什么枚举实现接口?

另一种方法是创建一个Command类,并为每个命令/功能提供一个公共内部类。 这样,您无需为每个命令创建单独的.java文件,并且可以通过Command.FirstCommand等单独使用每个命令。

至于尝试不使用开关箱来确定您需要调用的命令,请看下面的示例代码:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM