假设我有一个名为 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/