0

我有一个设计问题:

对于某些命令,我​​有以下整数集,例如:

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?
};

因为这些命令对数据结构进行操作。

如果每个命令都知道如何执行自身,即命令本身是否应该有一个函数。

如果 execute() 进入命令内部,它将如何访问数据结构?所以 Command 也应该有一个指向这个 DS 的指针。

或者应该是一对,但类 Execution 需要指向 DS 的指针。

还是应该像 Command 向我发送一些枚举,然后我将其切换为执行类似的操作

    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:
            ...
}

我应该怎么办 ?

有没有其他好的方法?谢谢。

4

1 回答 1

1

我不确定我是否能很好地理解您的问题,但是:

如果每个命令都知道如何执行自身,即命令本身是否应该有一个函数。

我想是的。我会将命令的逻辑包含在类的方法中。你想使用不同的结构,所以我会创建一个抽象基类,作为数据类型的接口。该命令将接受指向基类的指针并使用接口对其执行操作。

如果 execute() 进入命令内部,它将如何访问数据结构?所以 Command 也应该有一个指向这个 DS 的指针。

是的,我认为这完全没问题。

还是应该像 Command 向我发送一些枚举,然后我将其切换为执行类似的操作

如果您要在很多地方打开开关,我认为您应该避免使用它。如果它只在一个地方 - 也许没关系。但一般来说,我会避免这种方法,因为它使添加新类型变得困难。您忘记了一个开关,然后调试了几个小时。

于 2012-12-17T08:49:23.920 回答