java - 我什么时候应该使用惰性单例而不是普通单例?

标签 java single-instance

到目前为止,我已经看到了两个单例实例。

普通单例,

public class Singleton {
  private static Singleton instance;

  static {
    instance = new Singleton();
  }

  private Singleton() { 
    // hidden constructor
  }    

  public static Singleton getInstance() {
    return instance;
  }
}

和懒惰的单例,

public class Singleton {

  private Singleton() { 
    // hidden constructor
  }

  private static class Holder {
    static final Singleton INSTANCE = new Singleton();
  }

  public static Singleton getInstance() {
    return Holder.INSTANCE;
  }
}

编码来自this线程和this用户。我最近开始尝试学习单例,因为我以前的方法是

1.) 使用 static 来创建类似...

static MyClass instance;

2.) 我会尝试以一种看似奇怪的方式传递一个实例,

MyClass instance;

@Override
public void onEnable() { instance = this; }

// Transition to different class - - -

public OtherClass(MyClass myClass) {
    this.instance = myClass;
}

最后,我的最终目标是什么?我主要使用它来将变量从我的主类传递到其他类。我目前正在尝试学习如何正确使用 FileFileConfiguration,因此我想在我的类里面轻松分享它们。

如果我看起来像个初学者,请不要特意告诉我学习 Java,而是首先提供资源来帮助我解决我的问题。

最佳答案

至于何时,而不是如何:当很有可能不需要对象时,我会使用单例或任何其他对象的惰性实例化,并在需要它的可能性很高时立即实例化。一般来说,如果实例化失败,并且需要该对象,最好尽早失败。

关于java - 我什么时候应该使用惰性单例而不是普通单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471245/

相关文章:

Android 一个 MediaPlayer 实例 - 单例

java - str.equals ("String") 与 "String".equals(str)

java - 如果前面没有其他内容,则用于匹配某些内容的正则表达式

java - 为什么我尝试生成无穷无尽的线程会在 4 处停止?

android - 取消 SingleInstance 上的所有动画

c# - 检查 WPF 应用程序的其他实例是否正在运行

java - Java 是否支持像 Lisp 那样基于多个对象的类型分派(dispatch)到特定的实现?

java - 从 float 转换为 double

c# - 单个实例并在系统托盘中通知

c# - 两个应用程序实例之间的简单通信