Junior — Middle
Podes dar exemplos de diferentes formas de implementar o padrão Singleton?
sobes.tech IA
Resposta da IA
Em Java, o padrão Singleton pode ser implementado de várias formas:
- Inicialização preguiçosa com sincronização
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- Inicialização preguiçosa com verificação dupla (Double-checked locking)
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- Inicialização na carga da classe (inicialização ansiosa)
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- Uso de enum (método recomendado desde Java 5+)
public enum Singleton {
INSTANCE;
public void someMethod() {
// ...
}
}
Este método garante segurança em ambientes multithread e proteção contra serialização.
Cada método tem suas vantagens e desvantagens em termos de segurança, desempenho e simplicidade de implementação.