gpt4 book ai didi

java - 处理控制台命令的最佳 Java 设计模式

转载 作者:行者123 更新时间:2023-12-01 17:53:05 26 4
gpt4 key购买 nike

我正在尝试创建一个控制台来处理来自字符串的控制台命令。

目前我正在使用 if 语句来检查每个命令,如下所示:

if (command.contains("new train")) {
command = command.replace("new train ", "");
Train t = new Train();
t.setCode(command);
ServiceProvider.getTrainService().saveOrUpdate(t);
responeHandler("train " + command + " created");
}

但我认为这不是最好的解决方案。

我想知道是否已经有一个好的设计模式来解决这样的问题?

我已经研究了 builderfactory 模式,但无法真正确定它们是否是正确的选择。

最佳答案

也许是一个命令工厂模式?

interface Command {
void execute();
}

interface CommandFactory {
boolean canCreate(String input);
Command fromInput(String input); // or return Optional so it can be a FunctionalInterface
}

class TrainCommand implements Command {
String train;
public TrainCommand(String t) { train = t; }
public void execute() {
ServiceProvider.getTrainService().saveOrUpdate(t);
}
}

class TrainCommandFactory {
public boolean canCreate(String t) {
return t.contains("new train ");
}
public Command fromString(String c) {
return new TrainCommand(c.replace("new train ", ""));
}
}

还有一个Singleton Composite CommandFactory,它迭代所有已知的命令工厂:

class CommandFactories implements CommandFactory {
private static final CommandFactories INSTANCE;
private List<CommandFactory> delegates = Arrays.asList(
new TrainCommandFactory()
// others
};
public boolean canCreate(String t) {
return delegates.stream()
.filter(cf -> cf.canCreate(t))
.findAny().isPresent();
}
public Command fromString(String c) {
return delegates.stream()
.filter(cf -> cf.canCreate(t))
.findAny()
.map(CommandFactory::fromString);
}
}

关于java - 处理控制台命令的最佳 Java 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com