Sobes.tech
Junior — Middle

Quais são as desvantagens de usar um método estático ao implementar o padrão Singleton?

sobes.tech IA

Resposta da IA

A utilização de um método estático para implementar o padrão Singleton tem várias desvantagens:

  • Problemas com testes: O método estático e o estado estático são difíceis de simular ou substituir nos testes, dificultando a escrita de testes unitários.
  • Falta de flexibilidade: O Singleton estático não permite alterar facilmente a implementação ou criar subclasses, o que reduz a extensibilidade.
  • Problemas de inicialização: Se o Singleton for inicializado ao carregar a classe (inicialização ansiosa), isso pode levar a um gasto desnecessário de recursos se o objeto não for utilizado.
  • Segurança em ambientes multithread: Uma implementação incorreta do método estático pode não ser thread-safe, levando à criação de múltiplas instâncias em um ambiente multithread.

Exemplo de uma implementação clássica de Singleton com inicialização preguiçosa e segura para threads:

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

Mas mesmo essa abordagem tem limitações em termos de testabilidade e flexibilidade em comparação com o uso de DI (Injeção de Dependências).