Шаблон синглтона в JavaScript

Ниже приведен пример очень популярной реализации шаблона 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 ответ

Решение

Да, в большинстве случаев вам не нужна эта сложность, а просто

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

Тем не менее, картина с этим getSingleton Функция имеет одно преимущество: объект создается только при первом вызове функции, а не до того, как объект действительно понадобится. В зависимости от сложности объекта, это может улучшить использование памяти и время запуска вашей программы. Это в основном ленивая загрузка модуля.

Другие вопросы по тегам