我的情况如下。选择合适的平滑CMD线arg加工设计模式
我有一个摘要Command
类,它有一个exec
方法。我有一系列扩展这个抽象类的具体命令类。
我有一个CommandFactory
上下文类创建并返回一个适当的命令根据我解析并发送到工厂的cmdline参数。 (这里没有问题,我可以解析cmdline参数就好了)。
但是命令工厂内我有这样大的if-else - 如果不是不像这个
public Command getCmd(String cmdType){
if(cmdType == null){
return null;
}
if(cmdType.equalsIgnoreCase("CLEAN")){
return new CleanCmd();
} else if(cmdType.equalsIgnoreCase("KILL")){
return new KillCmd();
} else if(cmdType.equalsIgnoreCase("START")){
return new StartCmd();
}
return null;
}
注的名单:输入ARG游戏的一组标志和args这是范围太复杂这个问题。你可以把equalsIgnoreCase看作更复杂的东西。
但是我认为这个if else构造有点难看。我想用更优雅的东西来代替它。还纠正我,如果我错了当前的范式也违反开放原则,因为每次我添加一个新的命令我修改工厂?
嗯,但我的项目不使用春!但是,这很有趣,虽然 –
你不能使用一些轻量级DI,如https://github.com/google/guice从谷歌?我看不出如何避免在没有DependencyInjection的情况下编写CommandFactory。但如果你想出其他解决方案,请告诉我学习!好的代码 – rafaelim
好的,我会评估这个并且回复你。 –