Sobes.tech
Junior

Cos'è il pattern Singleton?

sobes.tech AI

Risposta dell'AI

Il singleton è un pattern creazionale che garantisce che una classe abbia una sola istanza e fornisce un punto di accesso globale a questa istanza. Viene utilizzato quando è necessario un oggetto unico per gestire una risorsa o uno stato condiviso.

Principio di funzionamento:

  1. Costruttore privato per vietare la creazione di nuove istanze tramite new.
  2. Campo statico privato per memorizzare l'unica istanza.
  3. Metodo statico pubblico che fornisce accesso all'istanza:
    • Verifica se l'istanza è stata creata.
    • Se no, la crea e la memorizza nel campo statico.
    • Restituisce l'istanza creata o esistente.

Esempio in Java:

public class Singleton {
    // Campo statico privato per memorizzare l'istanza
    private static Singleton instance;

    // Costruttore privato
    private Singleton() {
        // Inizializzazione se necessaria
    }

    // Metodo statico pubblico per ottenere l'istanza
    public static Singleton getInstance() {
        // Verifica null per l'inizializzazione lazy
        if (instance == null) {
            // Sincronizzazione per la sicurezza in ambienti multithread
            synchronized (Singleton.class) {
                // Verifica doppia nel blocco sincronizzato
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Logica di business del singleton
    public void doSomething() {
        System.out.println("L'istanza Singleton sta facendo qualcosa.");
    }
}

Applicazioni in QA Automation:

  • Gestione delle configurazioni di test (file di proprietà, variabili di ambiente).
  • Unica istanza del driver del browser (WebDriver) quando tutti i test usano lo stesso driver.
  • Gestore di log o report.
  • Pool di connessioni al database.

Vantaggi:

  • Garantisce la presenza di una sola istanza.
  • Fornisce un punto di accesso comodo all'istanza.
  • Inizializzazione lazy (creata solo alla prima richiesta).

Svantaggi:

  • Potrebbe nascondere dipendenze.
  • Rende più difficile il testing unitario, poiché il singleton rappresenta uno stato globale.
  • Violazione del principio di responsabilità singola (la classe può essere responsabile della sua logica e della gestione del suo ciclo di vita).
  • Potrebbero sorgere problemi di concorrenza se non implementato correttamente.