Sobes.tech
Middle+

Какъв е проблемът със сериализацията при използване на патърна Singleton?

sobes.tech AI

Отговор от AI

При сериализация на обект Singleton по подразбиране се губи гаранцията за уникалност на екземпляра.

Причина:

  • Методът readObject() по подразбиране създава нов екземпляр на класа по време на десериализация.

Проблем:

  • Вместо да получи препратка към съществуващия единствен екземпляр, след десериализация се създава втори, а дори и трети екземпляр на класа Singleton.

Решение:

  • Реализирайте в класа Singleton метода readResolve(). Този метод се извиква след десериализация на обекта и трябва да връща съществуващия екземпляр.
public class Singleton implements Serializable {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {
        // Защита от рефлексия
        if (INSTANCE != null) {
            throw new IllegalStateException("Singleton вече е инициализиран.");
        }
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    // Метод readResolve() за предотвратяване на създаването на нов екземпляр при десериализация
    protected Object readResolve() {
        return INSTANCE;
    }
}