单体模式:提供了将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码通过单一的变量进行访问。
用途: 可以用来划分命名空间,减少网页中的全局变量的数量
基本结构:
var Singleton ={
attribute1:true,
attribute2: 12,
method1: function(){
},
method2: function(){
}
}
//通过匿名函数创建单体对象,并且包含私有属性
var MyNamespace = {};
MyNamespace.Common = (function(){
var privateField= true;//私有属性 只能内部使用
function privateMethod(){
//私有方法 只能内部调用
}
return {
publicField:false,
publicField2: [1,2,3],
publicMethod: function(){
},
publicMethod2: function(){
}
}
})()
惰性实例化: 单体对象都是在脚本加载时就被创建出来,对于资源密集型的或者配置开销较大的单体,将其实例化延迟到需要的时候才去创建。
var MyNamespace = {};
MyNamespace.Common = (function(){
var singleton;
function constructor(){
var privateField= true;//私有属性 只能内部使用
function privateMethod(){
//私有方法 只能内部调用
}
return {
publicField:false,
publicField2: [1,2,3],
publicMethod: function(){
},
publicMethod2: function(){
}
}
}
return {
getInstance: function(){
if(!singleton){
singleton = constructor();
}
return singleton;
}
}
})();
var Common = MyNamespace.Common.getInstance();
Common.publicMethod();