2014-12-22 46 views
0

我在考虑如何包装所有的设置,例如我使用一次或甚至更多。让我们思考一下抽象。设置包装类是一个很好的做法吗?

class WholeApplicationSettingsInHere{ 
    private static boolean setting1, setting2; 

    WholeApplicationSettingsInHere(){set defaults} 

    public static boolean getSetting1(){return setting1} 
    public static void setSetting1(setting1){set setting1} 

    public static boolean getSetting2(){return setting2} 
    public static void setSetting2(setting2){set setting2} 

    ... 
} 

class One(){ 
/*No fields in here, except private fields*/ 
    methodOne(){use variables from WholeApplicationSettingsInHere class} 
    methodTwo(){} 
} 

class Two(){ 
/*No fields in here, except private fields*/ 
    methodOne(){use variables from WholeApplicationSettingsInHere class} 
    methodTwo(){} 
} 

我的问题是,如果这样做会是一个很好的做法吗?

+0

是的,如果你正在使用getter来访问而不是改变WholeApplicationSettingsInHere的状态。 – SMA

回答

0

这很难回答“这是一个很好的做法”,因为没有一个确定的答案。这完全取决于你的背景。你可能想要提供一个更准确地反映你在做什么的MCVE

我会说让这些变量和方法变为静态是一个非常可怕的想法 - 如果你想要设置类的两个实例会发生什么?

在你说“我只会需要一个设置实例”之前 - 你不能提前知道。这是对静态关键字的滥用。

而在那一点,为什么不只是使用Properties类的一个实例呢?

+0

你完全明白我的想法。你所说的静态是真的。我没有这样想过。我将按照您提到的方式检查Properties类。感谢您的贡献! – Kris

1

您应该PreferenceManagerSharedPreferences来存储和检索用户首选项。在课堂上使用静态布尔类似乎并不是一个好主意。

只需创建一个简单的类与方法,例如:

public class PreferencesHelper { 

    private PreferencesHelper() {} // No instantiation 

    public static boolean getSetting1(Context context) { 
     return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREFERENCE_KEY, defaultValue); 
    } 

    public static void setSetting1(Context context, boolean value) { 
     Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); 
     editor.putBoolean(PREFERENCE_KEY, value); 
     editor.apply(); 
    } 

} 

最后,要回答你的问题:是的,它可以是很好的做法,如果你这样做了上述代码。通过这样做,您无法将偏好键分散在应用程序中,并且使代码更易于阅读。

说了这么多,如果你在你需要一次设置多个偏好的情况是有史以来,这是一个有点浪费不必调用setSetting1()setSetting2()setSetting3(),等等,你重新创建对象一遍又一遍地。在这种情况下,只需获取Edtior对象,进行所有更改并应用更改。

+0

好的。我改变主意了。你有权利。它会更快,需要更少的时间和资源。谢谢! – Kris

+0

@Kris更快? SharedPreferences相对较慢!如果您需要超出您的活动生命周期的数据,则可以采用共享首选项。如果你只需要活动LifeCycle中的数据,静态变量应该快得多.. – Mike

+0

@Mike不使用apply()。它立即在内存中进行更改,并启动后台任务来更新数据库。无论如何,只要你只用了几次偏好,你就不会注意到有什么不同。如果你经常在同一个课堂上使用它们,你应该缓存它们。 –

相关问题