JS 单体模式

<!-- ————————JS设计模式 单体模式——————— -->
//1.简单单体模式
var Singleton={
attr1:true,
attr2:10,
method1:function(){
alert("方法一");
},
method2:function(){
alert("方法二");
}
};
//单体模式 划分命名空间(区分代码)
var XL={};//创建自己的命名空间
XL.Singleton2={
attr1:true,
attr2:10,
method1:function(){
alert("方法一");
},
method2:function(){
alert("方法二");
}
};
XL.Singleton2.method1();
//2.借用闭包创建单体 闭包:主要用于保护数据不受外界干扰
XL.Singleton3=(function(){
//添加自己的成员变量
var name="张三";
var f=function(){
alert("f");
};
//把块级作用域的执行结果赋值给单体对象
return {
arrt3:name,
method1:function(){
alert("方法一");
},
method2:function(){
alert("方法二");
},
method3:function(){
return f();
}
};
})();
alert(XL.Singleton3.arrt3);
XL.Singleton3.method3();
//3.惰性单体
XL.Base=(function(){
var uniq;//利用私有变量控制返回单体
function init(){
//私有成员变量
var a1=10;
var a2=true;
var fn1=function(){alert("fn1");};
var fn2=function(){alert("fn2");};
return {
attr3:a1,
attr4:a2,
method4:function(){
return fn1();
},
method5:function(){
return fn2();
}
};
}
return {
gentInstance:function(){
if(!uniq){//如果单体的实例不存在 创建实例单体
uniq=init();
}
return uniq;
}
}
})();
XL.Base.gentInstance().method5();
//4.分支单体 判断程序的分支用于浏览器差异检测
var def=true;
XL.More=(function(){
var objectA={//火狐浏览器
fix:"ff"

};
var objectB={//IE浏览器
fix:"Ie"
}
return (def)?objectA:objectB;
})();
alert(XL.More.fix);

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。