JavaScript: due implementazioni alternative per il Singleton Pattern

JavaScript: due implementazioni alternative per il Singleton Pattern

Esistono implementazioni alternative per il pattern Singleton oltre al tradizionale uso di oggetti letterali in JavaScript. Vediamole in dettaglio.

La prima implementazione prevede la restituzione di un oggetto che racchiude la logica dell'oggetto singleton:


var mySingleton = function() {
	// metodi e proprietà privati
	
	var privateVariable = 'Privato';
	function showPrivate() {
		console.log(privateVariable);

	}
	
	// parte pubblica
	return {
		publicMethod: function() {
			showPrivate();

		},
		publicVar: 'Pubblico'

	};
};

Esempio d'uso:


var singleton = mySingleton();
singleton.publicMethod(); // 'Privato'
singleton.publicVar; // 'Pubblico'

La seconda implementazione invece prevede anche la creazione di un metodo pubblico per ottenere un'istanza dell'oggetto singleton:


var mySingleton = (function() {
	var instantiated;
	function init() {
		// qui il singleton
		return {
			publicMethod: function() {
				console.log('hello world');

				
			},
			publicProperty: 'test'
			
		};

		
	}
	return {
		getInstance: function() {
			// controllo che non sia già stato istanziato
			if (!instantiated) {
				instantiated = init();

				
			}
			return instantiated;
			
		}

		
	};
	
})();

Esempio d'uso:


var singleton = mySingleton.getInstance();
singleton.publicMethod(); // 'hello world'

Come si può notare, la seconda implementazione segue da vicino lo schema già visto in altri linguaggi, come PHP.

Torna su