我编写了一个Java程序,它读入包含要执行的命令的文件(用我自己编写的语言)。命令以字符串形式读入并放入数组中。现在,“调度程序” - 方法将循环遍历数组,解释命令并调用将对其执行操作的相应方法。
这当然导致了一大堆嵌套的if语句:
if commandReadIn == this, do that...
if commandReadIn is of type x, get next element,treat next element as argument...
etc.
现在我只有一些命令,但如果我想添加数百个呢?代码将变得无法维护。
现在我想知道是否有可能完全摆脱条件逻辑。这里的命令模式似乎没什么用,因为我不得不在某个时候解释字符串..这意味着很多嵌套的“if”。如果不可能,那么以一种能够轻松添加,编辑或删除命令的方式重构命令及其语法的最佳方法是什么?
答案 0 :(得分:9)
使用Command Pattern命令。您的实施可以大大简化。
1)使用Command
方法创建execute
界面
2)为每个命令创建一个实现
3)当您启动程序时,创建一个命令字符串映射 - >命令执行
4)当你读入一个字符串时,查找相应的实现并调用它
5)(可选)您的execute
方法可以将自定义Context
对象作为参数,允许您以通用方式传递命令参数。由实现来理解上下文对象并从中检索参数。
使用这种方法,您将没有if语句,除了可能检查您是否无法从命令实现的缓存中检索任何内容。
答案 1 :(得分:2)
创建一个静态映射,将操作名称映射到其命令执行程序类名。创建一个工厂类,该工厂类将在给定操作的情况下返回命令执行器实例。
答案 2 :(得分:1)
如果您的语言不仅包含关键字序列,还包含一些参数/运算符等,请检查interpreter pattern。
答案 3 :(得分:1)
如何使用Interpreter pattern?然后,您需要编写将您的命令更改为解析树的解析器。 Visitors可用于遍历解析树,以执行语法检查和执行命令等任务。