将参数传递给命令模式

Passing arguments to command pattern

本文关键字:模式 命令 参数传递      更新时间:2023-10-16

好的,通常当我使用命令模式时,我会通过构造函数传入参数。 但是,我目前的设计并不允许这样做。 原因是我在启动时从 xml 文件加载数据,所以我可能有这样的东西:

<Actor>
    <InputComponent>
        <Mapping Type="Drag" Key=1 Command="MoveCommand"/>
        <Mapping Type="Press" Key=16 Command="FillerCommand"/>
        <Mapping Type="Click" Key=2 Command="FillerCommand"/>
    </InputComponent>
</Actor>

因为它们是作为字符串读入的,所以它们被传递给命令工厂对象,然后该对象创建正确的命令对象并将 em 交回给输入组件。 这意味着我无法访问它们,因为它们是构造的,因此无法通过构造函数指定特殊参数。 我可以通过一个 void 指针将这些额外的信息传递给 Execute 成员函数,但这非常不安全。 我还可以将 XML 元素传递给命令工厂,并让他们从进一步的 xml 属性(当前方法)初始化自己,但它仍然感觉像一个黑客解决方案。 欢迎任何建议。

在运行时执行此操作的唯一方法是在调用时统一传递参数,您可以使用

std::unordered_map<std::string, boost::any>或类似于单个参数。每个参数都有一个名称,您必须any转换为原始类型。