DESIGN PATTERN: SINGLETON
Il pattern Singleton è una soluzione architetturale che garantisce la creazione di una sola istanza di una determinata classe per l’intera durata dell’applicazione.
Viene utilizzato quando è necessario un unico punto di accesso globale a una risorsa condivisa, ad esempio:
- configurazioni dell’applicazione
- connessioni a database
- sistemi di logging
QUANDO UTILIZZARLO
- Serve una sola istanza condivisa
- Lo stato deve essere centralizzato
- L’oggetto è costoso da creare
- È richiesta una visione globale dello stato
VANTAGGI
- Consistenza globale: tutti gli utilizzatori condividono lo stesso stato.
- Controllo centralizzato: gestione unificata della risorsa.
- Risparmio di memoria: un’unica istanza evita duplicazioni inutili.
POTENZIALI SVANTAGGI
- Testing più complesso: può introdurre dipendenze nascoste, ostacolando i test unitari.
- Accesso globale rischioso: se abusato, può portare a un design meno modulare e più difficile da manutenere.
CODICE
/**
* SINGLETON
*/
class Logger {
//Istanza statica per conservare le informazioni
private static instance?: Logger;
private message?: string;
//Costruttore privato
private constructor(message: string) {
this.message = message;
}
//Punto in cui avviene la magia
static getInstance(message: string): Logger {
//Attenzione nei linguaggi multi thread in questo punto
if (this.instance) {
return this.instance;
}
this.instance = new Logger(message);
return this.instance
}
public getMessage() {
return this.message;
}
}
//USO SINGLETON
const logger1 = Logger.getInstance("ciao mondo");
const logger2 = Logger.getInstance("seconda instanza, non mi vedi");
console.log(logger1 === logger2); // true -> stessa istanza!
console.log(logger1.getMessage());
console.log(logger2.getMessage());