Singleton的概念(至少在Java中是这样说的,它必须使用私有构造函数来实现,对吗?例如:
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
}
但是,如果我们忽略这个事实并使用受保护的构造函数来执行,他会不会成为单身人士?在这种情况下,我在互联网上看到了一些示例。
public class Singleton {
private static Singleton singleton;
protected Singleton() {
}
public synchronized static Singleton getInstance() {
if (singleton == null) {
int tipoDoSingletonParaInstanciar = leUmArquivoTexto();
if (tipoDoSingletonParaInstanciar == 1) {
singleton = new SingletonSubclasse1();
} else if(tipoDoSingletonParaInstanciar == 2) {
singleton = new SingletonSubclasse2();
} else {
singleton = new Singleton();
}
}
return singleton;
}
public void metodoQuePodeSerSobrescrito() {
System.err.println("Singleton.metodoQuePodeSerSobrescrito()");
}
}
并且如果受保护的构造函数本身不是问题……继承单例,并不意味着其子类可以创建父级的多个实例?它不会破坏概念吗?
是否有可能继承Singleton而不会破坏其概念(阻止)?
您在那里创建了多个对象,这意味着它不再是单例了。如果这样做的话,您将打破单例的概念。