最简单的单例模式
var mySingleton = {
property1: "something",
property2: "something else",
method1: function () {
console. log('hello world' );
}
};
扩展单例模式,增加私有变量和私有方法
var mySingleton = function () {
// 私有变量
var privateVariable = 'something private' ;
// 私有方法
function showPrivate() {
console. log(privateVariable);
}
// 单例
return {
// 公有方法
publicMethod: function () {
// 内部访问私有方法
showPrivate();
},
// 公有变量
publicVar: 'the public can see this!'
};
};
var single = mySingleton();
single.publicMethod();
console.log(single.publicVar);
按需初始化
var Singleton = (function() {
var instantiated;
function init() {
// 单例
return {
publicMethod: function () {
console. log('hello world' );
},
publicProperty: 'test'
};
}
return {
getInstance: function () {
if (! instantiated) {
instantiated = init();
}
return instantiated;
}
};
})();
Singleton.getInstance().publicMethod();
其它变种
var SingletonTester = (function () {
function Singleton(options) {
options = options || {};
this.name = 'SingletonTester' ;
this.pointX = args. pointX || 6;
this.pointY = args. pointY || 10;
}
// 实例holder
var instance;
// 模拟静态变量和静态方法
var _static = {
name: 'SingletonTester' ,
getInstance: function (options) {
if (instance === undefined) {
instance = new Singleton(options);
}
return instance;
}
};
return _static;
})();
var singletonTest = SingletonTester.getInstance({
pointX: 5
});
console.log(singletonTest.pointX);