JavaScript中的单例模式

时间:2015-07-04 16:18:39

标签: javascript design-patterns singleton gang-of-four

下面是一个非常流行的JavaScript Singleton模式实现的示例:

var mySingleton = (function() {
    var instance;

    function init() {
        function privateMethod() {
            console.log("I am private");
        }
        var privateVariable = "Im also private";
        var privateRandomNumber = Math.random();
        return {
            publicMethod: function() {
                console.log("The public can see me!");
            },
            publicProperty: "I am also public",
            getRandomNumber: function() {
                return privateRandomNumber;
            }
        };
    };

    return {
        getInstance: function() {
            if (!instance) {
                instance = init();
            }
            return instance;
        }
    };
})();

我已经考虑了一段时间,并且当我们用这个简单的代码实现相同的结果时,我并不真正理解这种复杂性的需要:

singleton = (function() {
    var obj = {
        someMethod: function() {}
    }

    return obj;
}());

我在这里忽略了什么吗?

1 个答案:

答案 0 :(得分:18)

是的,在大多数情况下,您不需要这种复杂性,只会这样做

var singleton = {
    someMethod: function() {}
};

但是,具有getSingleton函数的模式确实有一个优点:对象仅在调用函数时(第一次)构建,而不是在实际需要对象之前构造。根据对象的复杂程度,这可以提高程序的内存使用和启动时间。它基本上是懒加载模块。