Middle+
Quel est le problème de sérialisation lors de l'utilisation du pattern Singleton?
sobes.tech IA
Réponse de l'IA
Lors de la sérialisation d'un objet Singleton par défaut, la garantie d'unicité de l'instance est perdue.
Raison :
- La méthode
readObject()par défaut crée une nouvelle instance de la classe lors de la désérialisation.
Problème :
- Au lieu d'obtenir une référence à l'instance unique existante, une seconde, voire une troisième instance de la classe Singleton est créée après la désérialisation.
Solution :
- Implémenter dans la classe Singleton la méthode
readResolve(). Cette méthode est appelée après la désérialisation de l'objet et doit retourner l'instance existante.
public class Singleton implements Serializable {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
// Protection contre la réflexion
if (INSTANCE != null) {
throw new IllegalStateException("Singleton déjà initialisé.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// Méthode readResolve() pour empêcher la création d'une nouvelle instance lors de la désérialisation
protected Object readResolve() {
return INSTANCE;
}
}