Middle+
Aký je problém serializácie pri použití vzoru Singleton?
sobes.tech AI
Odpoveď od AI
Pri serializácii objektu Singleton podľa predvoleného nastavenia stráca sa záruka jedinečnosti inštancie.
Dôvod:
- Metóda
readObject()podľa predvoleného nastavenia vytvára nový inštanc triedy počas deserializácie.
Problém:
- Namiesto získania odkazu na existujúci jediný inštanc sa po deserializácii vytvorí druhý, alebo dokonca tretí inštanc triedy Singleton.
Riešenie:
- Implementujte v triede Singleton metódu
readResolve(). Táto metóda je volaná po deserializácii objektu a mala by vracať existujúci inštanciu.
public class Singleton implements Serializable {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
// Ochrana proti reflexii
if (INSTANCE != null) {
throw new IllegalStateException("Singleton už inicializovaný.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// Metóda readResolve() na zabránenie vytvorenia nového inštancie pri deserializácii
protected Object readResolve() {
return INSTANCE;
}
}