一个人的寂寞 - 单例模式
·
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 编码
创建一个小型代码库
var A = {
Util: {
// 公用模块
util_method1: function () {},
util_method2: function () {},
// ...
},
Tool: {
// 工具模块
tool_method1: function () {},
tool_method2: function () {},
// ...
},
Ajax: {
// ajax 模块
get: function () {},
post: function () {},
// ...
},
Other: {
// 其他模块
// ...
},
// ...
};
// 使用
A.Util.util_method2();
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 count = Conf.get("COUNT");
console.log(count); // 1000
惰性单例
有些时候对于单例对象需要延迟创建,
// 惰性载入单例
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