Design patterns: Singleton
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
- Costruttore privato: Impedisce la creazione di più istanze della classe
- Metodo statico getInstance(): Verifica se esiste già un’istanza della classe; se non esiste, ne crea una nuova.
- Unica istanza: Ogni volta che viene chiamato getInstance(), restituisce sempre la stessa istanza, garantendo che ce ne sia soltanto una.
- 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.