Pattern: Singleton

Singleton

by rulokc

HTML

<script src="http://amatiasq.com/fiddle-console.js"></script>

JavaScript

// En javascript no hay clases y cada objeto es único por definición
var objSingleton = {id:1};
console.log(objSingleton.id);

// Singleton con propiedades privadas
var privateSingleton = (function() {
    var privateProp = 'PRIVATE';
    function getPrivateProp() {
        return privateProp;
    };
    return {
        id: 2,
        publicMethod : function() {
            return getPrivateProp();
        },
        publicVariable: 'PUBLIC'
    };
})();
console.log(privateSingleton.publicMethod());

// Singleton on demand
var classSingleton = (function() {
    var instance;
    function init() {
        return {
            id: Math.random()
        }
    };
    return {
        getInstance: function() {
            if (!instance) {
                instance = init();
            }
            return instance;
        }
    };
})();
var c = classSingleton.getInstance();
var d = classSingleton.getInstance();
console.log(c.id);
console.log(d.id);