Sobes.tech
Middle+

Qual é o problema de serialização ao usar o padrão Singleton?

sobes.tech IA

Resposta da IA

Ao serializar um objeto Singleton por defeito, perde-se a garantia de unicidade da instância.

Razão:

  • O método readObject() por defeito cria uma nova instância da classe durante a deserialização.

Problema:

  • Em vez de obter uma referência à instância única existente, após a deserialização é criada uma segunda, e até uma terceira instância da classe Singleton.

Solução:

  • Implementar na classe Singleton o método readResolve(). Este método é chamado após a deserialização do objeto e deve retornar a instância existente.
public class Singleton implements Serializable {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {
        // Proteção contra reflexão
        if (INSTANCE != null) {
            throw new IllegalStateException("Singleton já inicializado.");
        }
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    // Método readResolve() para evitar a criação de uma nova instância durante a deserialização
    protected Object readResolve() {
        return INSTANCE;
    }
}