Junior — Middle
Puoi fornire esempi di diversi modi di implementare il pattern Singleton?
sobes.tech AI
Risposta dell'AI
In Java, il pattern Singleton può essere implementato in diversi modi:
- Inizializzazione pigra con sincronizzazione
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- Inizializzazione pigra con doppio controllo (Double-checked locking)
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- Inizializzazione all'avvio della classe (eager initialization)
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- Utilizzo di enum (metodo raccomandato a partire da Java 5+)
public enum Singleton {
INSTANCE;
public void someMethod() {
// ...
}
}
Questo metodo garantisce la sicurezza del thread e la protezione dalla serializzazione.
Ogni metodo ha i suoi vantaggi e svantaggi in termini di sicurezza, prestazioni e semplicità di implementazione.