Sobes.tech
Junior — Middle

Qual é a desvantagem de implementar o Singleton através de código manual e por que isso é considerado uma má prática?

sobes.tech IA

Resposta da IA

A implementação do Singleton através de código manual é frequentemente considerada uma má prática por várias razões:

  1. Problemas de segurança em threads. Se não usar mecanismos de sincronização corretos (por exemplo, synchronized ou volatile), podem ser criadas várias instâncias ao aceder simultaneamente de múltiplas threads.

  2. Dificuldade na realização de testes. O Singleton dificulta a escrita de testes unitários, pois seu estado é global e pode persistir entre testes, causando efeitos colaterais.

  3. Acoplamento rígido. O uso do Singleton leva a um acoplamento forte do código, o que reduz a flexibilidade e torna a manutenção mais difícil.

  4. Problemas com o carregamento de classes. Implementações manuais podem causar problemas na inicialização, especialmente em sistemas complexos com múltiplos carregadores de classes.

  5. Melhores alternativas. Em Java, existem formas mais confiáveis de criar um Singleton, como usando enums ou classes internas estáticas, que garantem segurança em threads e simplicidade.

Exemplo de uma implementação ruim de Singleton:

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton(); // não seguro em threads
        }
        return instance;
    }
}

Neste exemplo, se getInstance() for chamado simultaneamente de diferentes threads, podem ser criadas múltiplas instâncias, violando o princípio do Singleton.