单例模式
·
Yin灏
/**
* 单例模式:只允许实例化一次的对象类,有时也用一个对象来规划一个命名空间,井井有条的管理对象上的属性与方法。
*/
// 命名空间的管理员
var Ming = {
g: function (id) {
return document.getElementById(id);
},
css: function (id, key, value) {
this.g(id).style[key] = value;
},
//...
};
/**
* 模块分明
* 通过单例模式来管理代码库的各个模块,
*/
baidu.dom.addClass; // 添加元素
baidu.dom.append; // 插入元素
baidu.event.stopPropagation; // 阻止冒泡
baidu.event.preventDefault; // 阻止默认行为
baidu.event.trim; // 去除首尾空格
baidu.string.encodeHTML; // 将字符串进行 html 编码
/**
* 创建一个小型代码库
* 比如有一个 A 库,包含公用模块、工具模块、ajax模块、其他模块
*/
var A = {
Util: {
util_method1: function () {},
util_method2: function () {},
//...
},
Tool: {
tool_method1: function () {},
tool_method2: function () {},
//...
},
Ajax: {
get: function () {},
post: function () {},
//...
},
Others: {
//...
},
//...
};
// 使用
A.Util.util_method1();
A.Tool.tool_method2();
A.Ajax.get();
/**
* 无法修改的静态变量
*/
var Conf = (function () {
// 私有变量
var conf = {
MAX_NUM: 100,
MIN_NUM: 1,
COUNT: 1000,
};
// 返回取值器对象
return {
get: function (name) {
return conf[name] ? conf[name] : null;
},
};
})();
/**
* 惰性单例
* 有时候单例对象需要延迟创建,
*/
var LazySingle = (function () {
var _instance = null;
function Single() {
return {
publicMethod: function () {},
publicProperty: "1.0",
};
}
return function () {
if (!_instance) {
_instance = Single();
}
return _instance; // 返回单例
};
})();
console.log(LazySingle().publicProperty); // 1.0