迭代执行命令列表 - 哪个模式?

时间:2012-07-25 16:18:19

标签: java design-patterns strategy-pattern command-pattern

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

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

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

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

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

4 个答案:

答案 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可用于遍历解析树,以执行语法检查和执行命令等任务。