使用命令模式

时间:2014-12-22 14:45:23

标签: design-patterns input command config

我刚刚开始阅读一本名为" Game Programming Patterns"的书。在最开始,解释了一个称为命令模式的简单模式,其示例是能够配置特定键触发的操作。但实际上,我对此有疑问。为什么要使用命令来触发这些操作,而不仅仅是执行以下操作:

Map<Key, Action> map
if(isPressed(key)) map.get(key).trigger()

结果将是相同的,坦率地说,在我看来它似乎更有效。任何人都可以向我解释为什么,在这种情况下,你会使用命令模式而不是我上面的例子?

命令模式示例:

Command* this_specific_key_command;
if(isPressed(key)) this_specific_key_command.trigger()

命令类类似于

class Command{
    virtual void trigger() = 0;
}

抱歉搞砸了代码。我希望这是可以理解的。

1 个答案:

答案 0 :(得分:2)

实际上,您的第一个实现正是命令模式。命令模式的定义如下:

The Command Pattern encapsulates a request as an object, thereby letting you
parameterize other objects with different requests, queue or log requests, and support
undoable operations.

此定义中的第一句定义命令模式。您提供的两个样本都是等效的。在第一个中,您调用对象Action,而在第二个中,您将其称为Command。这两者完全相同。它们是封装请求的对象(定义引用)。

如果要存储指针或使用地图存储这些命令,则无关紧要。重要的是,这些对象有一个名为trigger()的方法,它封装了请求(或要完成的操作)。这就是命令模式的作用。