我想编写一个接受用户命令的应用程序.user命令以以下格式使用:
命令参数
例如,应用程序可以有"复制","粘贴","删除"命令我认为该程序应该像这样工作:
public static void main(String args[]){
if(args[0].equalsIgnoreCase("COPY")){
//handle the copy command
} else if(args[0].equalsIgnoreCase("PASTE")){
//handle the copy command
}/**
code skipped
**/
}
Run Code Online (Sandbox Code Playgroud)
所以,它有效,但我认为当我在我的程序中有更多命令时它会变得越来越复杂,而且,阅读也是不同的.简单的逻辑是什么想法?
根据命令行语法的简单程度,简单enum可能是您的解决方案
public enum Command {
COPY {
@Override void execute() {
System.out.println("Copying...");
}
},
PASTE {
@Override void execute() {
System.out.println("Pasting...");
}
},
DELETE {
@Override void execute() {
System.out.println("Deleting...");
}
},
;
abstract void execute();
public static void main(String args[]) {
Command c = Command.valueOf(args[0].toUpperCase());
c.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
使用java Command paste,java Command bleh等编译并运行它.您需要将其余部分传递args给生产代码中的枚举.此外,如果找不到具有指定名称的枚举常量,则valueOf抛出IllegalArgumentException.
但是,如果您的语法变得更加复杂,您可能希望使用专门用于命令行解析的库,例如Apache Commons CLI.
如果您担心处理命令行参数,那么 Commons CLI就是为此而设的.
浏览CommandLineParser
如果您担心if-else的复杂性,那么您可以使用Command Pattern
public interface Command {
void exec();
}
public class Copy implements Command {
void exec() {
// your copy Code
}
}
public class Paste implements Command {
void exec() {
// your Paste Code
}
}
public class Delete implements Command {
void exec() {
// your Delete Code
}
Run Code Online (Sandbox Code Playgroud)
- 然后
public static void main(String args[]){
Map commandMap<String,Command> = new HashMap<String,Command>();
commandMap.put("Copy", new Copy());
commandMap.put("Paste", new Paste());
commandMap.put("Delete", new Delete());
if ( commandMap.containsKey(args[0]) ){
commandMap.get(args[0]).exec();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |