一、单体模式描述
1、单体模式是javascript中最基本但又最有用的模式之一,他可能比其他任何模式都常用。
2、这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源。
二、单体模式分类
1、简单单体
// 1、简单单体代码
var singLeton = {
name:'CHX',
age:28,
sayName:function () {
alert('CMX');
}
}
alert(singLeton.name);//CMX
//补充:划分命名空间(区分代码)
var CHX = {};
CHX.singLeton = {
name:'CHX',
age:28,
sayName:function () {
alert('CMX');
}
}
CHX.singLeton.sayName();//CMX
2、闭包单体
// 2、闭包单体 闭包的主要目的 保护数据
var CHX = {};
CHX.singLeton = (function(){
//添加自己的私有成员
var name = 'CHX';
var age = 28;
var sayName = function() {
alert('CHX');
}
//把块级作用域里的执行结果赋值类我的单体对象
return {
name:name,
age:age,
sayName:sayName
}
})();
CHX.singLeton.sayName();//CMX
3、惰性单体
// 3、惰性单体 和闭包单体有一些相似的地方
var CHX = {}; //命名空间
CHX.Base = (function(){
//私有变量 控制返回的单体对象
var uniqInstance; // undinfind
// 需要一个构造器 init 初始化单体对象的方法
function init() {
//添加自己的私有成员
var name = 'CHX';
var age = 28;
var sayName = function() {
alert('CHX');
}
return {
name:name,
age:age,
sayName:sayName
};
}
return {
getInstance:function() {
if(!uniqInstance) { //实例不存在
uniqInstance = init();
}
return uniqInstance;
}
}
})();
//CHX.Base.getInstance().sayName();alert('CHX')
//console.log(CHX.Base.getInstance().name);CMX
4、分支单体
// 4、分支单体 主要解决浏览器兼容问题(判断程序的分支,浏览器差异的检测)
var CHX = {};
var def = false; //到时候动态判断赋值
CHX.More = (function(){
var obj1 = {//火狐浏览器 内部的一些配置
attr1:'FF属性1'
};
var obj2 = {//IE浏览器 内部的一些配置
attr1:'IE属性1'
};
return (def)?obj1:obj2;
})();
alert(CHX.More.attr1);//IE属性1