我正在重构一个接受来自终端命令的Java应用程序。目前,有一个巨大的if-else结构,它检查发出的命令并执行所需的方法。我想知道是否有可能用完善的设计模式替换这个逻辑。 我查看了Command模式和策略模式,但在这种情况下似乎无法理解它。请建议。
更新 我确实使用了JCommander,但这并没有摆脱if-else结构。
MyCommand cmd1 = new MyCommand();
...
...
MyCommandN cmdN = new MyCommandN();
JCommander cmd = new JCommander();
cmd.addCommand("myCommand1", cmd1);
...
...
cmd.addCommand("myCommandN", cmdN);
try {
cmd.parse(args);
//
if ("myCommand1".equals(cmd.getParsedCommand())) {
System.out.println("running command1");
}
...
...
else if ("myCommandN".equals(cmd.getParsedCommand())) {
// Sysout statements only for illustration. I call command specific methods here.
System.out.println("running commandN");
} else {
cmd.usage();
}
//
} catch (ParameterException ex) {
System.out.println(ex.getMessage());
cmd.usage();
}
答案 0 :(得分:1)
使用JCommander:http://jcommander.org/#Overview
答案 1 :(得分:1)
介绍一个通用命令界面并使用Map
Map<String, Command> commands = new HashMap<String, Command>();
commands.put("myCommand1", new MyCommand());
commands.put("myCommandN", new MyCommandN());
JCommander cmd = new JCommander();
cmd.addCommand("myCommand1", cmd1);
...
cmd.addCommand("myCommandN", cmdN);
try {
cmd.parse(args);
Command command = commands.get(cmd.getParsedCommand());
if(command == null){
cmd.usage();
}
// execute command
}
...