Sobes.tech
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:

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