Middle+
Na czym polega problem serializacji przy użyciu wzorca Singleton?
sobes.tech AI
Odpowiedź od AI
Podczas serializacji obiektu Singleton domyślnie traci się gwarancję unikalności instancji.
Przyczyna:
- Metoda
readObject()domyślnie tworzy nową instancję klasy podczas deserializacji.
Problem:
- Zamiast uzyskać odwołanie do istniejącej jedynej instancji, po deserializacji tworzone są drugie, a nawet trzecie instancje klasy Singleton.
Rozwiązanie:
- Zaimplementować w klasie Singleton metodę
readResolve(). Ta metoda jest wywoływana po deserializacji obiektu i powinna zwracać istniejącą instancję.
public class Singleton implements Serializable {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
// Ochrona przed refleksją
if (INSTANCE != null) {
throw new IllegalStateException("Singleton już zainicjalizowany.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// Metoda readResolve() zapobiegająca tworzeniu nowego egzemplarza podczas deserializacji
protected Object readResolve() {
return INSTANCE;
}
}