Design patterns: Singleton

Mauto 2 min

Il Singleton Pattern viene utilizzato per garantire che una classe abbia una sola istanza e fornisca un punto di accesso globale a questa istanza. Questo pattern è utile in situazioni in cui avere più istanze di una classe potrebbe causare problemi, occupare troppe risorse o non avere senso.

Caratteristiche del pattern singleton

  1. Costruttore privato: Impedisce la creazione di più istanze della classe
  2. Metodo statico getInstance(): Verifica se esiste già un’istanza della classe; se non esiste, ne crea una nuova.
  3. Unica istanza: Ogni volta che viene chiamato getInstance(), restituisce sempre la stessa istanza, garantendo che ce ne sia soltanto una.
  4. Clonazione e deserializzazione proibita: Il pattern blocca la clonazione e la deserializzazione, impedendo la duplicazione dell’istanza singleton.

Esempio in PHP:

class Singleton {
    private static $instance;

    // Il costruttore è privato per impedire l'uso di "new"
    private function __construct() {} 

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }
    
    // Evita la clonazione dell'istanza
    private function __clone() {}

    // Evita la deserializzazione dell'istanza
    private function __wakeup() {}
}

// Utilizzo
$instance1 = Singleton::getInstance();
$instance2 = Singleton::getInstance();

echo $instance1 === $instance2 ? "Stessa istanza" : "Istanze diverse";

Caso d’uso frequente

Immagina di sviluppare un’applicazione che interagisca con un database. La connessione al database è un’operazione che può richiedere molte connessioni e ciò può portare a problemi di performance, gestione delle risorse o addirittura errori. In questo contesto, il Singleton è utile perché garantisce che ci sia una sola connessione al database aperta.

TORNA ALLA GUIDA

content_copy Copiato