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