Концепция Синглтона (по крайней мере, в java) гласит, что она должна быть реализована с помощью частного конструктора, верно? Пример:
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
}
Однако, если мы проигнорируем этот факт и сделаем это с защищенным конструктором, он перестанет быть одиночкой? Я видел несколько примеров для inte rnet с этим сценарием.
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()");
}
}
И если защищенный конструктор не является проблемой сам по себе ... наследование синглтона не означает, что его подклассы могут создать несколько экземпляров родитель? Разве это не нарушает концепцию?
Можно ли наследовать синглтон, не нарушая его концепций (блокирование)?