本章目的:为整个项目提供一个入口,实现一个类似于cmd的入口
代码实现效果:通过cmd “XXX” 展现不同输出
--version 显示 "version 1.0.1"(hard code的)
--help 显示 "show help message"(hard code的)
--cp foo/bar MyApp arg1 arg2 显示"classpath:foo/bar class:Myapp args:[arg1 arg2]"
之后还会加对应的指令,现在暂时就这几个。。。。以为代码和博客同步进行,所以之后再enhance~
与jvm影响不大的,就直接hard code了,请轻喷~
由于git 账号有点问题,就直接粘贴代码了,
git地址之后之后补上~
首先创建一个Cmd Bean,
public class Cmd {
private String order;
public Cmd(String order) {
this.order = order;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
}
由于考虑到 处理order指令的工作不应该由Cmd来做,所以新建了一个类叫ParseCmd,作用就是根据不同的指令,进行不同的操作,上代码~
public class ParseCmd {
private Cmd cmd;
public ParseCmd(Cmd cmd) {
this.cmd = cmd;
}
public void parse() {
Option option = null;
String order = cmd.getOrder();
//得到指令,如--version --help ,然后根据指令进行不同操作
String optionorder = getOption(cmd);
if("--version".equals(optionorder)) {
option = new VersionOption();
}else if("--help".equals(optionorder)) {
option = new HelpOption();
}else if("--cp".equals(optionorder)) {
option = new ClassPathOption(order);
}
option.doProcess();
}
private String getOption(Cmd cmd) {
String order = cmd.getOrder();
String[] orders = order.split("\\s+");
return orders[0];
}
}
由于自定义规则,根据输入的第一个指令来区分行为,所以通过getOption来得到对应的指令,然后通过多态来实现option接口,最后根据不同指令来实现接口的doprocess方法。
option接口中就一个doprocess方法,就不上代码了,把具体实现类上一下。。。。hardcode。。。println。。。轻喷~
VersionOption:
public class VersionOption implements Option{
@Override
public void doProcess() {
System.out.println("version 1.0.1");
}
}
HelpOption:
public class HelpOption implements Option{
@Override
public void doProcess() {
System.out.println("show help message");
}
}
ClassPathOption:
public class ClassPathOption implements Option{
private String order;
public ClassPathOption(String order) {
this.order = order;
}
@Override
public void doProcess() {
String[] orders = order.split("\\s+");
String classPath = orders[1];
String className = orders[2];
StringBuffer classArgs = new StringBuffer();
if(orders.length>3) {
classArgs.append("[");
int length = 3;
while(length<orders.length) {
classArgs.append(orders[length]);
classArgs.append(" ");
length++;
}
classArgs.append("]");
}
System.out.println("classpath:"+classPath+" class:"+className+" args:"+classArgs);
}
}
最后,就是main函数(结果在注释里):
public class Main {
public static void main(String[] args) {
Cmd cmd = new Cmd("--version");
/*结果是:version 1.0.1*/
// Cmd cmd = new Cmd("--help");
/*结果是:show help message*/
// Cmd cmd = new Cmd("--cp foo/bar MyApp arg1 arg2 arg3");
/*结果是:classpath:foo/bar class:MyApp args:[arg1 arg2 arg3 ]*/
ParseCmd parseCmd = new ParseCmd(cmd);
parseCmd.parse();
}
}
虽然简单,但是一个简单的cmd还是出来了,感觉还是蛮优秀的,就是这么自恋,不接受反驳。。。。。。
明天开始class文件的读取~~~