Singleton在这种情况下是否合适?

时间:2017-12-31 03:16:28

标签: java static singleton

想象一下,我有一个名为FileManager的班级。此类处理创建文件和从这些文件中检索数据,以及加载和保存这些文件中的数据。这个类只需要一个实例。我应该使用Singleton将其保存为一个实例(因为这就是所需要的全部内容)或者我应该每次只创建一个新实例吗?

我要求你以坚实的理由支持你的答案。

编辑:以下是使用Singleton的示例。作为一个额外的问题,这应该使用急切或懒惰的实例化吗?在这种情况下,在哪种情况下会有什么优势呢?

public class FileManager {

private static FileManager instance;
private static File kitFile = null;
private static File langFile = null;

private static FileConfiguration langData = null;
private static FileConfiguration kitData = null;

public static FileManager getInstance() {
    if(instance == null)
        instance = new FileManager();
    if(kitFile == null)
        kitFile = new File(Kits.getInstance().getDataFolder(), "Kits.yml");
    if(kitData == null)
        kitData = YamlConfiguration.loadConfiguration(kitFile);
    if(langFile == null)
        langFile = new File(Kits.getInstance().getDataFolder(), "/lang/"+Kits.getInstance().getConfig().getString("lang"));
    if(langData == null)
        langData = YamlConfiguration.loadConfiguration(langFile);
    return instance;
}

代码继续拥有创建文件,将数据保存到这些文件以及从这些文件加载​​数据的方法。这些方法仅在一个类中调用。然后,代码继续使用各种类中使用的getter。

1 个答案:

答案 0 :(得分:1)

我不认为在这里实现公共getInstance方法是个好主意。这是在这个类中实现一些名为“saveXXFile”,“readXXFile”的方法的更好方法吗?这样,您还可以避免代码中可能出现的多线程错误。

换句话说,如果我写这个,我可以在这个类中封装一些名为“saveXXFile”,“readXXFile”的方法,而不是将文件实例暴露给类用户。