Usare il pattern Singleton in Javascript

Usare il pattern Singleton in Javascript

Alcuni lo considerano cattiva programmazione, altri no, altri sono più moderati.

Ma come la metti la metti il pattern Singleton continua ad essere molto utilizzato in tutti i linguaggi.

Abbiamo già visto qualche implementazione, ed oggi aggiungiamo un esempio in Javascript.

Per chi non sa ancora cosa sia Singleton, vi riporto la definizione di Wikipedia:

Il singleton è un design pattern creazionale che ha lo scopo di garantire che di una determinata classe venga creata una e una sola istanza, e di fornire un punto di accesso globale a tale istanza.

Qua sotto un esempio:

class User {
    constructor() {
        if (!User.instance) {
            this.data = [];
            User.instance = this;
        }
        return User.instance;
    }

    add(item) {
        this.data.push(item);
    }

    getId(id) {
        return this.data.find(d => d.id === id);
    }
}

const instance = new User();
Object.freeze(instance);

export default instance;

Ovviamente stiamo parlando dell'ultima versione di Javascript, ES6.

Come vedete abbiamo nel costruttore il controllo sull'esistenza dell'istanza.

Poi abbiamo due funzioni, e sotto richiamiamo l'oggetto.

Object.freeze serve per congelare un oggetto.

In questo modo preveniamo eventuali aggiunte / cancellazioni / modifiche.

Enjoy!