单例模式是一个著名的模式,通俗一个说就是一个Class只有一个对象实例。经典的实现方法是:建立一个Class和一个方法,在方法中如果对象实例不存在,new一个新的对象,如果存在,直接返回对象实例本身。
在JS中,单例模式可以通过一个独立的入口函数,提供共享资源,从而使其与全局变量(资源)隔离。
我们可以这样实现单例模式:
var mySingleton = (function () {
// Instance stores a reference to the Singleton
var instance;
function init() {
// Singleton
// Private methods and variables
function privateMethod(){
console.log( "I am private" );
}
var privateVariable = "Im also private";
var privateRandomNumber = Math.random();
return {
// Public methods and variables
publicMethod: function () {
console.log( "The public can see me!" );
},
publicProperty: "I am also public",
getRandomNumber: function() {
return privateRandomNumber;
}
};
};
return {
// Get the Singleton instance if one exists
// or create one if it doesn't
getInstance: function () {
if ( !instance ) {
instance = init();
}
return instance;
}
};
})();
使用方法如下:
// Usage:
var singleA = mySingleton.getInstance();
var singleB = mySingleton.getInstance();
console.log( singleA.getRandomNumber() === singleB.getRandomNumber() ); // true
单例模式的争论在这里就不多说,个人认为,存在就有存在的价值。