2009-07-29 107 views
0

我有一个程序以字符串形式获取命令。字符串中的每个字符代表一个命令。命令的例子下面给出从字符串输入获取命令

OBIPC 

Ø - 打开文件

乙 - 请以粗体

文我 - 请以斜体文字

P - 打印文本

ç - 关闭文件

我的程序必须分析ŧ他的字符串,并做相应的工作。每个命令都按顺序执行。我想出了以下想法来做到这一点。

  1. 为每个命令创建操作类。每个将有一个Execute()方法并实现一个接口IExecutable。所以如果我有5个命令,我将有5个类来处理每个命令。
  2. 保留可在关联容器中执行操作的命令和关联对象(在.NET中为std :: map,而在.NET中为字典)。
  3. 循环输入字符串中的每个字符。检查每个角色的相关操作。如果是,请获取操作对象并致电执行()。某种指令设计模式。如果某些字符没有关联,则抛出错误或跳过。

这种方法对我的问题是最好的还是你看到任何简单/有效的方法来做到这一点?这不是特定于任何编程语言,我可以使用任何编程语言。我正在寻找的是想要做到这一点的想法。

有什么想法?

回答

3

是的。这正是我如何做,除了使用Runnable :: run()而不是IExececutable :: Execute()。

0

许多脚本语言允许您调用eval()类似的函数,它将本质上作为代码运行一个字符串。这可能是最简单的做法,也是最不安全的做法。

0

你真的需要每个命令5个类吗?您可以在.h中创建一个接口,该接口公开了一个函数,该函数使该字符串具有参数。在.cpp中你可以有一个从接口继承的类。隐藏在后面的类将有工作来分析字符串并抛出异常,以防它包含与命令无关的字符(字符顺序是否重要?)。一旦分析结束,它可以为每个命令调用一个类函数。