在 java 中实现单例的最常见方法是使用具有以下形式的公共(public)访问器方法的私有(private)构造函数 --
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance(){
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
但是,由于构造函数是私有(private)的,因此它阻止了对单例的子类化。有什么方法可以创建允许子类化的单例吗?
最佳答案
当您有一个 class A extends B
时,A
的实例本质上“包含”B
的实例。所以继承的概念与单例模型是相反的。
根据您的需要,我会考虑使用组合/委托(delegate)。 (A 将引用单例,而不是扩展其类)。如果出于某种原因需要继承,请使用 Singleton 方法创建一个接口(interface),让 Singleton 实现该接口(interface),然后让另一个类也实现该接口(interface),并委托(delegate)给单例来实现相关方法。
关于java - 在 java 中具有子类化的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549825/