【发布时间】:2017-01-10 20:24:04
【问题描述】:
public class DBSingleton {
private static DBSingleton instance = new DBSingleton();
private DBSingleton() {
// why do we need this constructor
}
public static DBSingleton getInstance() {
return instance;
}
}
私有构造函数如何帮助我?
我的意思是所有变量和方法都是静态的,即使我将构造函数公开,它也不会改变任何东西。
假设有人创建了我的单例对象,什么都不会发生,因为此类中的所有内容都是静态的,这意味着与类本身相关联,而不是与对象相关联。 Java 静态属性被所有对象共享。
谁能给我一个合理的例子
【问题讨论】:
-
首先,单例不一定必须作为具有静态方法的类来实现。其次,当对象创建本身很繁重(CPU/网络/等)时,您希望控制创建的实例数量,例如连接池。
-
因为如果你的构造函数是公共的,任何人都可以调用它,从而创建你的单例的其他实例,这违背了单例的全部目的。如果创建多个实例不成问题,那为什么首先要让它成为单例呢?如果一切都是静态的,为什么还要创建一个实例?
-
这甚至不是一个单例。如果不创建
DBSingleton的实例,就无法访问instance,而由于构造函数是私有的,因此无法完成。你的意思可能是public static DBSingleton getInstance() -
@alfasin 感谢您的链接,但我没有找到问题的答案,这是完全不同的
-
正如我在另一条评论中所说,如果所有字段和方法都是静态的,那么创建单例就毫无意义。您根本不需要任何实例来访问类的静态成员。所以让它成为一个单例会让人很困惑,并且表现出缺乏理解。将构造函数设为私有,并且不提供任何 getInstance() 方法,这清楚地表明您永远不应该实例化该类。
标签: java design-patterns singleton