我遇到了设计问题:
对于某些命令,我有以下几组整数:
addition = {2,3,4,5}
subtraction = {3,6,9}
其中add的优先级是> sub。
所以我创建了一个像
这样的类class Command{
int priority;
public:
bool operator <(const Command &com);
bool isInSet(int);
// i donot want this to be int ,
// may be tommorrow i go for strings or char.
// How to do this. AND
void execute(int); // should it be here?
};
由于这些命令在数据结构上运行。
每个命令都应该知道如何执行iteself,即命令本身是否应该有一个函数。
如果execute()进入Command,它将如何访问数据结构?所以Command也应该指向这个DS。
或者应该是一对但是类执行需要指向DS的指针。
或者它应该像Command给我一些enum然后我切换它做类似
的事情 enum {PUSH, POP};
while(!commands[i].isInSet(3))
++i;
switch(comands[i].getName())
{
case PUSH:
// operations on DS i have all of them in this scope. :)
case POP:
...
}
我该怎么办?
还有其他好方法吗? 感谢。
答案 0 :(得分:1)
我不确定我的问题是否很好,但是:
每个命令都应该知道如何执行iteself,即命令本身是否应该有一个函数。
我想 - 是的。我将命令的逻辑包含在类的方法中。您希望使用不同的结构,因此我将创建一个抽象基类,充当数据类型的接口。该命令将接受指向基类的指针,并使用该接口对其执行操作。
如果execute()进入Command,它将如何访问数据结构?所以Command也应该指向这个DS。
是的,我认为这完全可以。
或者它应该像Command给我一些enum然后我切换它做类似
的事情
如果你打开许多地方,我认为你应该避免它。如果它只在一个地方 - 也许没关系。但总的来说,我会避免使用这种方法,因为它会增加新类型的难度。你忘了一个开关,然后调试几个小时。