gpt4 book ai didi

oop - 是否有一个常用的 OO 模式来保存 "constant variables"?

转载 作者:行者123 更新时间:2023-12-04 07:09:59 24 4
gpt4 key购买 nike

我正在做一点 pinball-game project出于爱好,正在寻找一种封装常量变量的模式。

我有一个模型,其中有一些值将在该模型的生命周期内保持不变,例如最大速度/最大重力等。在整个 GUI 和其他区域中,需要这些值才能正确验证输入。目前,它们被包含为对 public static final 的引用。 ,或者只是简单的硬编码。我想将这些“常量变量”封装在一个可以注入(inject)模型中并由 View / Controller 检索的对象中。

澄清一下,“常量变量”的值不一定是在编译时定义的,它们可能来自读取文件;用户输入等。在编译时已知的是需要哪些。一种可能更容易解释的方式是,无论这种封装是什么,它提供的值都是 不可变 .

我正在寻找一种方法来实现这一点:

  • 具有编译时类型安全性(即在运行时不将字符串映射到变量)
  • 避免任何静态(包括无法扩展的枚举)

  • 我知道我可以定义一个具有以下方法的接口(interface):
     public int getMaximumSpeed();
    public int getMaximumGravity();

    ...并将其实例注入(inject)模型中,并以某种方式使其可访问。但是,这会导致大量样板代码,编写/测试等非常乏味(我这样做是为了好玩:-))。

    我正在寻找一种更好的方法来做到这一点,最好是具有成为共享词汇的一部分的好处,就像设计模式一样。

    有一个更好的方法吗?

    附言我对此进行了更多思考,而我能找到的最好的权衡是有类似的东西:
    public class Variables {
    enum Variable {
    MaxSpeed(100),
    MaxGravity(10)

    Variable(Object variableValue) {
    // assign value to field, provide getter etc.
    }
    }

    public Object getVariable(Variable v) { // look up enum and get member }

    } // end of MyVariables

    然后我可以做类似的事情:
    Model m = new Model(new Variables());

    优点:变量的查找受到保护,因为必须是枚举的成员才能编译,只需很少的额外代码即可添加变量
    缺点:枚举无法扩展,易碎(需要重新编译才能添加变量),变量值必须从 Object 强制转换(在本例中为 Integer),这同样不是类型安全的,尽管泛型可能是一种选择为此……不知何故

    最佳答案

    您在寻找 Singleton或者,变体,Monostate ?如果不是,那么该模式如何满足您的需求?

    当然,这是 Anything Global Is Evil 的强制性免责声明。 .

    更新:我做了一些查找,因为我一直有类似的辩论/问题。我偶然发现了一个 list经典全局/范围解决方案的“替代方案”。以为我会分享。

    关于oop - 是否有一个常用的 OO 模式来保存 "constant variables"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529823/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com