现在这可能听起来很简单,但我有点混淆了。我正在尝试在我的应用程序中创建一个菜单。根据特定条件,将启用/禁用菜单的某些选项。由于它是基于控制台的,我还想为菜单的每个“状态”指定哪些命令可供用户使用。
示例:
EMPTY_STATE
有ADD_COMMAND, REMOVE_COMMAND, QUIT_COMMAND
FULL_STATE
有ADD_COMMAND, VIEW_COMMAND, REMOVE_COMMAND, QUIT_COMMAND
我希望我的应用程序尽可能灵活,这意味着我可以轻松添加更多状态并自定义可以使用的命令。这意味着我想避免使用if的列来知道这是采取的行动。
由于每个州都有不同的命令,我想到创建一个名为ENUM
的{{1}}来计算那些不同的状态。我还创建了一个名为State
的{{1}},其中包含用户在使用我的应用程序时可以执行的所有命令。
我的基本想法很简单:
ENUM
因此,State countains Commands和Commands会计算它们的标签,这是一个命令前缀的字符串(“-add”)
但是,国家可以计算许多命令,这就是问题所在。因为我不能也不想为Commands
中的每个案例做一个构造函数,所以我考虑使用一个可以计算所有命令的ArrayList,使它成为:
EMPTY_STATE(Commands.ADD_COMMAND,Commands.REMOVE_COMMAND,Commands.QUIT_COMMAND)
这就是我的问题所在。正如文档所说,一个arraylist可以在参数中采用一个集合来分配其实习内容。
我是否可以建议如何构建它以使其干净且易于管理?
答案 0 :(得分:2)
为每个州存储可用命令有什么问题? 毕竟,你必须在某个地方定义它。
您可以将可用命令的EnumSet传递给每个State枚举的构造函数,如下所示:
SOME_STATE( EnumSet.of(Command.A, Command.B)),
OTHER_STATE( EnumSet.of(Command.A, Command.C))
...
作为替代方案,您可以为每个命令指定可用的状态。