什么时候我们应该在Java中使用Singleton类?

M S*_*ach 6 java singleton

根据我的想法,当我们在整个应用程序中共享相同的对象状态时,我们应该将类创建为Singleton.在这种情况下,我们希望用户每次都限制创建新实例,以便它们不能维持多个状态.同意.但是通过将实例变量声明为静态可以实现相同的行为.对我来说,无论是它还是类cacheobjectcontainer,它看起来也会起到同样的作用.loggerClassloader

请帮助我理解上面的概念静态实例变量无法解决的目的和类需要声明Singleton?

编辑部分

好的,让我更清晰一些.单例类的目的是在jvm中只保留一个单例类的实例.同意.但我试图想出为什么我们只想保留一个实例的原因.原因有两个:

1)创建对象可能很昂贵.所以我们只想保留一个实例.在这种情况下同意将实例变量声明为静态并不能解决任何问题.

2)我们希望跨应用程序共享相同的对象状态.我认为这是将类声明为单例的主要目的.但它可以通过将实例变量声明为静态来实现.

但看起来像1是将任何类声明为静态而不是原因2的主要原因,因为它也可以用静态变量实现.

它是否正确?

Ami*_*far 8

声明实例变量使该引用成为静态对象.这意味着该类只有一个实例.但它不会阻止任何其他人做,new SomeObject()无论它是否是静态引用.拥有单例类的想法是控制实例.例如,如果您创建构造函数private,则无法new创建新实例.因此,您正在控制实例的创建.