Какой шаблон проектирования следует использовать для глобальной конфигурации - PullRequest
5 голосов
/ 07 марта 2012

Я читал, что использование статических переменных в классе, который никогда не создается, является плохой идеей, потому что переменные могут обнуляться, когда класс больше не находится в памяти. Имеет смысл.

Это то, что я делал для примера

public class MasterParameters {

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

}

Я также слышал, что использование Singleton одинаково плохо, и люди предлагают использовать «внедрение зависимостей» - однако это кажется сложным и излишним для того, что мне нужно. Я просто не смотрю на правильные примеры?

Я хочу простой способ определить переменную в одном месте , к которой можно получить доступ из любого места в моем коде без необходимости передавать объект параметров вокруг. Что ты предлагаешь? Спасибо:)

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Я бы предложил шаблон Singleton (я знаю, что многим это не нравится), но, похоже, это самое простое решение, которое будет работать. Посмотрите на этот кусок кода:

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 голосов
/ 07 марта 2012

Рекомендуется использовать статический метод вместо переменной:

public class MasterParameters {

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