Sobes.tech
Middle+

Singleton naqshidan foydalanishda serializatsiya muammosi nima?

sobes.tech AI

AIdan javob

Standart serializatsiya qilishda Singleton ob'ektining noyobligini kafolatlash yo'qoladi.

Sababi:

  • readObject() usuli odatda deserializatsiya paytida sinfning yangi nusxasini yaratadi.

Muammo:

  • Mavjud yagona nusxaga havola olish o'rniga, deserializatsiyadan so'ng ikkinchi yoki hatto uchinchi nusxa yaratiladi.

Yechim:

  • Singleton sinfida readResolve() metodini amalga oshiring. Bu metod ob'ekt deserializatsiya qilinadiganidan so'ng chaqiriladi va mavjud nusxani qaytarishi kerak.
public class Singleton implements Serializable {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {
        // Refleksiya hujumlariga qarshi himoya
        if (INSTANCE != null) {
            throw new IllegalStateException("Singleton allaqachon boshlang'ich holatda.");
        }
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    // Deserializatsiya paytida yangi nusxa yaratilishini oldini olish uchun readResolve() metodi
    protected Object readResolve() {
        return INSTANCE;
    }
}