Implementazione del Design Pattern Singleton in TypeScript

Il design pattern Singleton garantisce che una classe abbia una sola istanza e fornisce un punto di accesso globale a essa. Questo pattern è particolarmente utile quando si desidera controllare l'accesso a risorse condivise, come connessioni a database o file di configurazione.

Caratteristiche principali del Singleton

  • Un'unica istanza condivisa
  • Accesso controllato tramite un metodo statico
  • Costruttore privato per prevenire l'istanziazione esterna

Implementazione in TypeScript

Di seguito un esempio di implementazione di una classe Singleton in TypeScript:

class Singleton {
  private static instance: Singleton;

  // Costruttore privato per evitare la creazione diretta
  private constructor() {
    console.log('Istanza Singleton creata');
  }

  // Metodo statico per ottenere l'istanza
  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }

  public doSomething(): void {
    console.log('Metodo del Singleton chiamato');
  }
}

// Utilizzo
const singleton1 = Singleton.getInstance();
singleton1.doSomething();

const singleton2 = Singleton.getInstance();
console.log(singleton1 === singleton2); // true

Spiegazione del codice

  • private static instance: contiene l'unica istanza della classe.
  • private constructor: impedisce la creazione di nuove istanze dall'esterno.
  • getInstance(): metodo statico che crea o restituisce l'istanza esistente.

Vantaggi del Singleton

  • Controllo centralizzato dell'accesso all'istanza
  • Risparmio di memoria evitando la creazione di oggetti duplicati
  • Utile per la gestione di risorse condivise

Considerazioni

Anche se il Singleton può sembrare conveniente, un uso eccessivo può introdurre dipendenze globali non desiderate, rendendo più difficile testare e mantenere il codice. Usalo con giudizio, soprattutto in applicazioni di grandi dimensioni.

Torna su