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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

答案

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

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

以上是关于Singleton在这种情况下是否合适?的主要内容,如果未能解决你的问题,请参考以下文章

用片段替换某些东西

csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us

在这种特定情况下,SQL Server 会始终短路吗?

在这种情况下 << 是啥?

设计模式Singleton模式

我的片段中的按钮无法识别