Categorie
Javascript Programmazione

{JS} Singleton Pattern

Comprendere i patterns e la loro utilità è la conferma di aver compreso bene il linguaggio Javascript; Trattandosi di protocolli-procedurali scritti da sviluppatori esperti, risultano estremamente utile per aprire ulteriormente e confermare la “forma mentis” acquisita da un programmatore.

Cos’è il Singleton Pattern?

Prendiamo un oggetto,

var oggetto = {
	proprieta1: "abc",
	proprieta2: "def"
	}

il Singleton Pattern è un pattern che prevede che un oggetto sia istanziato una sola volta.

In realtà in JavaScript possiamo creare oggetti direttamente mediante la notazione letterale; ognuno di questi oggetti è già un singleton.

Qual’è allora lo scopo di questo pattern?

Scopo

Quando creiamo un oggetto ad esempio nel contesto globale quest’ultimo è accessibile in qualsiasi punto della nostra applicazione; tuttavia, non è detto che questo oggetto sia da noi utilizzato nel corso della nostra programmazione e questo si traduce in un’inutile spreco di risorse per la sua creazione.
Inoltre, se per l’inizializzazione/creazione del nostro oggetto abbiamo bisogno di dati non ancora disponibili, come ad esempio, elementi non ancora caricati nel DOM di una pagina HTML, dovremo necessariamente posticipare la creazione dell’istanza.

Quindi possiamo riassumere in queste tre ragioni l’utilità del singleton pattern:

  • Ottimizzazione dell’utilizzo delle risorse disponibili.
  • Temporizzazione dell’istanziamento di un oggetto.
  • Esistenza di un’unica istanza di un oggetto.

Il Singleton Pattern

var oggettoSingleton=(function(){
var instanza;
    return {
prendiIstanza: function(){
if(!instanza){
instanza = {
    proprieta1: "abc",
    proprieta2: "def"
}
    return instanza;
}
    
}
    }
})();

Per proteggere l’instanza effettiva del nostro oggetto e per fare in modo che sia creata solo al momento della nostra richiesta, ricorriamo a un espressione IIFE  assegnandola alla variabile oggettoSingleton;

Inizialmente se richiamiamo la variabile oggettoSingleton otterremo il contenuto della funzione IIFE, ovvero un oggetto con all’interno un solo metodo prendiIstanza.

L’oggetto Singleton vero e proprio sarà creato quando invocheremo il metodo prendiIstanza(), il quale dopo aver controllato che non esiste tramite l’istruzione if creerà un ulteriore oggetto ottenendo quanto il pattern si era preposto.

var mySingleton = oggettoSingleton.prendiInstanza();
console.log(mySingleton.proprieta1);	 // "abc"

In particolar modo nel Singleton pattern sfruttiamo la capacità delle funzioni di restituire, con il comando “return”, diversi tipi di dati e nel nostro caso specifico un’oggetto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *