Middle+
Kāda ir serializācijas problēma, izmantojot Singleton modeli?
sobes.tech AI
Atbilde no AI
Noklusējuma serializācijas laikā Singleton objekts zaudē unikālas instances garantiju.
Iemesls:
readObject()metode noklusējuma režīmā izveido jaunu klases instanci deserializācijas laikā.
Problēma:
- Tā vietā, lai iegūtu atsauci uz esošo vienīgo instanci, pēc deserializācijas tiek izveidota otra, pat trešā Singleton klases instance.
Risinājums:
- Implementējiet Singleton klasē
readResolve()metodi. Šī metode tiek izsaukta pēc objekta deserializācijas un tai jāatgriež esošo instance.
public class Singleton implements Serializable {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
// Aizsardzība pret refleksiju
if (INSTANCE != null) {
throw new IllegalStateException("Singleton jau ir inicializēts.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// readResolve() metode, lai novērstu jaunas instance izveidi deserializācijas laikā
protected Object readResolve() {
return INSTANCE;
}
}