Middle+
180
¿En qué consiste el problema de serialización al usar el patrón Singleton?
Respuesta de la IA
sobes.tech AI
Al serializar un objeto Singleton por defecto, se pierde la garantía de unicidad de la instancia.
Razón:
- El método
readObject()por defecto crea una nueva instancia de la clase durante la deserialización.
Problema:
- En lugar de obtener una referencia a la instancia única existente, después de la deserialización se crea una segunda, e incluso una tercera instancia de la clase Singleton.
Solución:
- Implementar en la clase Singleton el método
readResolve(). Este método se llama después de la deserialización del objeto y debe devolver la instancia existente.
public class Singleton implements Serializable {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
// Protección contra reflexión
if (INSTANCE != null) {
throw new IllegalStateException("Singleton ya inicializado.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// Método readResolve() para evitar la creación de una nueva instancia durante la deserialización
protected Object readResolve() {
return INSTANCE;
}
}