什么设计模式适用于全局配置?

6
我发现在从未实例化的类中使用静态变量是不好的,因为当该类不再存在于内存中时,这些变量可能会变为 null。这很有道理。
以下是我的一个示例:
public class MasterParameters {

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

我也听说使用单例模式同样不好,人们建议使用“依赖注入”——然而,这似乎对我所需的过于复杂和繁琐。难道我只是没有看到正确的例子吗?

我想要一个简单的方法,在一个地方定义一个变量,可以在代码中的任何地方访问它,而不必传递参数对象。您有什么建议吗? 谢谢:)


我想要一种简单的方法,在一个地方定义一个变量,可以在代码的任何地方访问它,而不必传递参数对象。你有什么建议吗?如果是这样,那就是一个Singleton,或者全局变量,或者你喜欢的任何名称。 - Captain Giraffe
1
你的第一段实际上是没有意义的。你误解了你所阅读的内容,或者你的参考资料太差了。在Java中,东西不会“突然消失”在内存中。 - toto2
1
你的例子实际上是单例模式的一种形式。 - toto2
1
这很好知道,你有参考来源吗?我在Stack Overflow上看到说类最终会被卸载,变量将为空,这让我感到害怕,所以才首先发了这个帖子。我想我不能相信所有的东西。不过得到了一些赞,增加了可信度。 - Submerged
1
你应该给出"disappearing values"的引用,这样我才能踩它;它是完全没有价值的。 - toto2
显示剩余6条评论
2个回答

4

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

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()) {....}

0
最佳实践是使用静态方法而不是变量:
public class MasterParameters {

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接