singleton中的私有构造函数


public class DBSingleton {
private static DBSingleton instance = new DBSingleton();
private DBSingleton() {
// why do we need this constructor
}
public static DBSingleton getInstance() {
return instance;
}
}

私人构造函数如何帮助我?

我的意思是,所有的变量和方法都是静态的,即使我将构造函数保留为公共的,它也不会改变任何东西
假设有人创建了我的singleton对象,什么都不会发生,因为这个类中的所有东西都是静态的,这意味着与类本身相关,而不是与对象相关。Java静态属性共享给所有对象。

有人能给我举个合理的例子吗

您需要一个私有构造函数来防止用户实例化您的类。

如果您将构造函数公开,则用户可以执行DBSingleton singleton = new DBSingleton(),并且您的类将不是Singleton!

单例类(编辑:与单例实例进行比较-参见注释)甚至不一定需要实例化;只要给它一个私有构造函数并将所有其他方法声明为静态就足够了,从而迫使用户在类上调用它们。

构造函数必须是私有的,以确保类是单例的,无论你是否创建了它的单个实例。如果没有声明私有构造函数,Java将自动为它提供一个公共的无参数构造函数。

该类需要是一个单独的实例,大概是为了安全起见,也就是说,在你想调用它上的方法的情况下,这些方法完全按照单例所说的去做。如果你有一个类的实例没有明确地成为单例,那么当你在它上调用方法时,就不能保证它正在运行单例的实现,因为实际上您可能有一个DBSingleton的子类,其中所述方法被重写。(如果您将它们调用为DBSingleton.someMethod(),您当然会得到预期的行为,但如果您这样做:

DBSingleton dbsInstance = DBSingleton.getInstance();
// ... all sorts of code, some of which might affect dbsInstance
dbsInstance.someMethod();

所有赌注都取消了。)

声明一个类以避免它的其他实例的更合适的方法是将它声明为final。你给它一个私有构造函数,这样它也不能被实例化。(一个最终类或一个具有私有构造函数的类(或者更确切地说,零个非私有构造函数)足以使该类不可重写。)

最新更新