您的位置:首页 > 其它

单体模式

2016-07-18 21:28 225 查看
单体(singleton)模式是javascript中最基本但又最有用的模式之一,它可能比其他任何模式都常用。
这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源。
简单单体
闭包单体
惰性单体
分支单体
//单体模式
var Ext = {};

Ext.model = {
attr : 10,
attr2 : 20,
fn1 : function(){
console.log('fn1');
},
fn2 : function(){
console.log('fn2');
}
}

console.log(Ext.model.attr);
Ext.model.fn1();

//闭包单体
var Ext = {};
Ext.model = (function(){
//给自己添加私有成员
attr = 10;
attr2 = 20;
var methods = function(){
console.log('methods1');
}
var mothods2 = function(){
console.log('methods2');
}

//把块级作用域里的执行结果复制给我的单体对象
return {
a1 : attr,
a2 : attr2,
m1 : function(){
return methods();
},
m2 : function(){
return methods2();
}
}
})();

console.log(Ext.model.a1);
Ext.model.m1();

//惰性单体,和闭包单体有一些相似的地方
var Ext = {};
Ext.model = (function(){
//私有变量,控制返回的对象
var result;   //undinfined

//需要一个构造器,init初始化单体对象的方法
function init(){
//私有成员变量
var attr1 = 10;
var attr2 = 20;
var methods1 = function(){
console.log('methods1');
};
var methods2 = function(){
console.log('methods2');
};

return {
a1 : attr1,
a2 : attr2,
m1 : function(){
return methods1();
},
m2 : function(){
return methods2();
}
}
}

return {
getmodel : function(){
//如果不存在就创建单体
if(!result){
result = init();
}
return result;
}
}
})();

console.log(Ext.model.getmodel().a1);
Ext.model.getmodel().m1();

//分支单体 用于判断浏览器差异检测
var Ext = {};
var def = true;

Ext.model = (function(){
var objA = {
attr1 : '火狐浏览器'
// 属性1
// 属性2
// 方法1
// 方法2
};
var objB = {
attr1 : 'IE浏览器'
// 属性1
// 属性2
// 方法1
// 方法2
}

return (def) ? objA : objB;
})();
console.log(Ext.model.attr1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  闭包