Sobes.tech
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:

  1. 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;
    }
}
  1. 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;
    }
}
  1. 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;
    }
}
  1. 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.