将某些内容设置为INSTANCE而不是创建新对象意味着什么?

Mag*_*igo 3 java instance

我正在互联网上的某个地方阅读一些代码,我看到这个有趣的部分引起了我的兴趣,我很好奇它是如何工作的.

有一个名为ResourceManager的类,如下所示:

public class ResourceManager {
  private static final ResourceManager INSTANCE = new ResourceManager();

  public static ResourceManager getInstance() {

      return INSTANCE;
  }

}
Run Code Online (Sandbox Code Playgroud)

(它有很多其他的东西,但我不认为有必要包括).但是,我觉得有趣的是,作者没有包含构造函数.事实上,在他的主要方法中,他只对这个类进行了一次引用,而不是创建一个他刚写的新对象:

ResourceManager.getInstance().etc();
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这样的编码.我不得不修改它,因为我需要一个ResourceManager对象来工作,所以我做的是:

ResourceManager res = ResourceManager.getInstance();
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好.但是,我仍然不完全理解这里发生了什么.如果没有构造函数,这个类是如何创建的?

Aug*_*ust 8

这是单例模式,意味着只有一个类的实例ResourceManager(构造函数应该真正private强制执行).

但是,我仍然不完全理解这里发生了什么.如果没有构造函数,这个类是如何创建的?

如果您没有显式编写构造函数,Java将自动插入一个默认构造函数(假设超类也有一个默认构造函数).

  • 正如其名称所暗示的那样,单例模式的目的是提供对类实例的统一访问.因此,不要在需要它的每个类中传递类型`ResourceManager`的引用,而只需调用`ResourceManager.INSTANCE`.查看关于Singleton的Effective Java的部分,非常好. (2认同)