java - Singleton 适合这种情况吗?

标签 java static singleton

假设我有一个名为 FileManager 的类。此类处理创建文件并从这些文件检索数据,以及从这些文件加载​​和保存数据。这个类只需要有一个实例。我应该使用单例将其保留为一个实例(因为这就是所需要的)还是应该每次都创建一个新实例?

我请求您用事实和充分的理由来支持您的回答。

编辑:这是一个使用单例的示例。作为一个附加问题,这应该使用急切实例化还是惰性实例化?两者的优势是什么,在这种情况下和一般情况下哪种更容易被接受?

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。

最佳答案

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

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

关于java - Singleton 适合这种情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48039685/

相关文章:

Angular 2 : how to force an injectable to be a singleton in the app

Swift:完成处理程序和单例

java - 为什么Openjdk1.8的源码中没有java.nio.ByteBuffer?

java - 单击回收器 View 子项后启动新 Intent

Java-Stream-API : Map Reduce

c - 在 C 中重新声明静态变量......从来没有发生过?

java - 线程安全的枚举单例

java - 代号一 - 隐藏单个元素的动画删除所有内容

c - 这个数组是静态的还是动态的?

c - 为什么静态变量不允许loop()运行?