3

我编写了一个 Java 程序,它读取包含要执行的命令的文件(使用我自己编写的语言)。命令以字符串形式读入并放入数组中。现在“调度程序”方法将遍历数组,解释命令并调用将作用于它们的相应方法。

这当然会导致一大堆嵌套的 if 语句:

if commandReadIn == this, do that... 
if commandReadIn is of type x, get next element,treat next element as argument... 
etc. 

现在我只有几个命令,但是如果我想添加数百个呢?代码将变得无法维护。

现在我想知道是否有可能完全摆脱条件逻辑。命令模式在这里似乎没有多大用处,因为无论如何我都必须在某个时候解释字符串..这意味着很多嵌套的“if”。如果不可能,以一种易于添加、编辑或删除命令的方式重组命令及其语法的最佳方法是什么?

4

4 回答 4

10

为您的命令使用命令模式。您的实现可以大大简化。

1) 使用方法创建Command接口execute
2)为每个命令创建一个实现。
3)当你启动你的程序时,创建一个命令字符串的映射 -> 命令实现。
4) 当你读入一个字符串时,查找适当的实现并调用它。
5) 可选地,您的execute方法可以将自定义Context对象作为参数,允许您以通用方式传递命令参数。理解上下文对象并从中检索参数取决于实现。

使用这种方法,您将没有 if 语句,除了可能检查您是否未能从命令实现的缓存中检索任何内容。

于 2012-07-25T16:19:18.907 回答
2

创建一个静态映射,将操作名称映射到其命令执行程序类名称。创建一个工厂类,该类将返回给定操作的命令执行器实例。

于 2012-07-25T16:21:31.103 回答
1

如果您的语言不仅包含关键字序列,还包含一些参数/运算符等,请检查解释器模式。

于 2012-07-25T16:21:32.400 回答
1

使用解释器模式怎么样?然后,您需要编写一个解析器,将您的命令更改为解析树。访问者可用于遍历分析树以完成语法检查和执行命令等任务。

于 2012-07-25T16:22:05.677 回答