Sobes.tech
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;
    }
}