思路是:先写个main方法,用Scanner输入模拟前端传过来的命令。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入gm命令");
while (scanner.hasNextLine()) {
String s = scanner.nextLine();
GmManger getme = GmManger.getme();
String result = getme.gmOrder(s);
System.out.println(result);
}
}
然后gm命令是通过反射获取方法执行。
public class GmManger {
/**
* 用枚举来实现单例
*/
private enum Singleton {
INSTANCE;
GmManger manger;
Singleton() {
this.manger = new GmManger();
}
GmManger getme() {
return manger;
}
}
/**
* 获取实例对象
*
* @return
*/
public static GmManger getme() {
return Singleton.INSTANCE.getme();
}
/*
*
* 执行gm命令
*/
public String gmOrder(String order) {
if (order.length() <= 0) {
return "gm命令无效";
}
String[] strings = order.split(" ");
if (strings.length <= 0) {
return "gm命令无效";
}
String gm = strings[0];//获取命令名称
String[] params = new String[strings.length - 1];
if (strings.length > 1) {
System.arraycopy(strings, 1, params, 0, params.length);
}
try {
Method declaredMethod = this.getClass().getDeclaredMethod(gm, String[].class);
if (declaredMethod == null) {
return "命令未匹配";
}
Object result = declaredMethod.invoke(this, (Object) params);
if (result instanceof String) {
return (String) result;
}
} catch (Exception e) {
e.printStackTrace();
}
return "执行失败";
}
private String hello(String[] parm) {
if (parm.length <= 0) {
return "gm命令参数错误";
}
return "gm命令执行成功 " + parm[0];
}
private String additem(String[] parm) {
if (parm.length != 2) {
return "gm命令参数错误";
}
String format = String.format("gm命令执行成功,增加物品:%s 数量:%s", parm[0], parm[1]);
return format;
}
}
执行结果