【问题标题】:What design pattern should be used for a global configuration全局配置应该使用什么设计模式
【发布时间】:2012-03-07 04:27:18
【问题描述】:

我一直在阅读,在从未实例化的类中使用静态变量是一个坏主意,因为当类不再在内存中时,变量可能会变为 null。有道理。

这是我一直在做的一个例子

public class MasterParameters {

public static boolean           DEBUG_MODE =                true;
protected MasterParameters(){
    // Exists only to defeat instantiation.
}

}

我还听说使用 Singleton 也同样糟糕,人们建议使用“依赖注入”——不过,这对于我需要的东西来说似乎很复杂而且矫枉过正。我只是没有看正确的例子吗?

我想要一种简单的方法来在一个位置定义一个变量,该变量可以从我的代码中的任何位置访问,而无需传递参数对象。你有什么建议? 谢谢:)

【问题讨论】:

  • “我想要一种简单的方法来在一个位置定义一个变量,该变量可以从我的代码中的任何位置访问,而无需传递参数对象。你有什么建议?”如果这是你想要的,它是一个单例,或者一个全局变量或者你喜欢的任何名称。
  • 你的第一段确实没有有意义。您误解了您正在阅读的内容,或者您​​的参考文献非常糟糕。在 Java 中,东西不会从内存中“消失”。
  • 您的示例实际上是单例模式的一种形式。
  • 这很高兴知道,你有来源吗?我读到堆栈溢出说该类最终将被卸载并且变量将为空,这让我感到害怕并让我首先发布这个。我想你不可能相信一切。不过,有一些支持增加了可信度。
  • 您应该引用“消失的值”,这样我就可以否决它;完全是垃圾。

标签: java design-patterns configuration global-variables


【解决方案1】:

我建议使用单例模式(我知道很多人不喜欢它),但这似乎是最简单的解决方案。看看这段代码:

public enum Constants {
    INSTANCE;

    public void isInDebugMode() { 
        return true;
    }
}

这是你如何使用它(即使是静态代码):

if(Constants.INSTANCE.isInDebugMode()) {....}

您可能还会考虑一些更复杂的解决方案:

public enum Constants {
    DEBUG(true),
    PRINT_VARS(false);

    private boolean enabled;

    private Constants(boolean enabled) {
        this.enabled = enabled;
    }

    public boolean isEnabled() {
        return enabled;
    }
}

示例用法:

if(Constants.DEBUG.isEnabled()) {....}

【讨论】:

    【解决方案2】:

    最好使用静态方法,而不是变量:

    public class MasterParameters {
    
    public static boolean DebugMode(){
         return true; // change this
    }
    protected MasterParameters(){
        // Exists only to defeat instantiation.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多