Шаблон Singleton в 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
имеет одно преимущество: объект создается только тогда, когда функция вызывается (в первый раз), а не до того, как объект действительно нужен. В зависимости от сложности объекта это может улучшить использование памяти и время запуска вашей программы. Это в основном ленивая загрузка модуля.