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;
}
}