【问题标题】:Design pattern for taking user input and invoking method接受用户输入和调用方法的设计模式
【发布时间】:2009-10-19 15:30:12
【问题描述】:

我需要为我正在编写的计算机游戏实施控制解决方案以获取用户输入。

我正在查看命令模式,但不确定它是否适合此模式。

【问题讨论】:

  • 您能否详细说明您的命令输入?

标签: java design-patterns


【解决方案1】:

IMO,命令模式在这种情况下被过度使用。如果命令完全是瞬态的——你不会存储或操作对象——那么增加的复杂性、对象代码开销和使用命令的样板就没有什么意义了。

更合适的方法是简单的开关和方法调用。也许您可能希望将您正在调用的接口与实现分开,尽管这可以在以后轻松完成(如果您喜欢测试或跟踪,您可能迟早会这样做)。如果可以更改键,那么从输入值到操作值的简单映射应该很简单。

【讨论】:

  • 谢谢汤姆 - 我认为命令模式可能有点过度设计它。我正在考虑有一个输入处理程序类,它接受输入,在 Map 中查找相应的键,并尝试通过另一个类中的反射调用 Maps 值方法,例如KEY_A, performMoveLeftAction() KEY_S, performMoveRightAction() KEY_SPACE, performFireAction() 等 地图可以从文件中加载,并允许配置。这听起来合理吗,是否符合任何特定模式?它读起来有点像缩减的访客模式。
【解决方案2】:

在不了解您的输入的情况下,可能值得查看Interpreter pattern 来读取和解析输入,并结合命令模式来实际执行命令。

【讨论】:

    【解决方案3】:

    该技术通常称为“double dispatch”,但解释器模式描述的是一般模式。

    【讨论】:

      【解决方案4】:

      在命令模式中,最好使命令不可变,这意味着没有运行时输入。不要把问题复杂化。您需要做的就是实时接受输入并以某种方式对其进行解释(如果您设置了模式,请参阅 Thomas 的提示)。如果您想消除大的 switch 语句或大的 if-else 块,那么抽象工厂模式可能是值得的。

      【讨论】:

        猜你喜欢
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        • 2020-11-13
        • 1970-01-01
        相关资源
        最近更新 更多