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