本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-12-15
单例模式(Singleton):又称单体模式,是只允许实例化一次的对象类,有时我们也用一个对象来规范一个命名空间,井井有条的管理对象上的属性和方法。
单例模式是JavaScript中最常见的一种模式,一个字面量对象就是一个单例,这种模式经常为我们提供一个命名空间。
var A = {
Util: {
util_method1: function() {},
util_method2: function() {},
},
Tool: {
tool_method1: function() {},
tool_method2: function() {},
},
Ajax: {
get: function() {},
post: function() {},
}
}
根据静态变量只能访问不能修改且创建后就能使用,所以,我们将变量放在一个函数里面形成闭包,闭包内部的方法可以访问到这个变量,而同时向外只提供获取变量的方法,不提供修改的方法;而为了保证创建后就能使用,所以采用自执行函数。
var Conf = (function () {
// 私有变量
var conf = {
MAX_NUM: 100,
MIN_NUM: 1,
COUNT: 1000
}
return {
get(name) {
return conf[name];
}
}
})()
var c = Conf.get('MAX_NUM');
console.log(c); // 1000
有些时候,对于单例对象需要延迟创建,所以在单例中还存在一种延迟创建的形式,有人称之为“惰性单例”。
var LazySingle = (function () {
var _instance = null;
function Single() {
// 私有属性和方法
return {
method1: function() {},
property1: 1,
}
}
// 获取单例对象接口
return function getSingleObj() {
if (!_instance) {
_instance = Single();
}
return _instance;
}
})();
const l = LazySingle(); // LazySingle就是getSingleObj函数,l就是_instance = Single() = 单例对象
console.log(l.property1); // 1
不同于创建私有变量,惰性单例返回的是一个函数而不是一个单例对象,最终是通过调用返回的函数来获得一个单例对象;