标签:
单体模式:用来划分命名空间而组织一些方法和属性的对象,如果它能被实例化,只能被实例化一次;但对象不是单体
var Singleton={ attr1:true; attr2:2, method1:function(){ ... }, method2:function(){ ... } };
var GiantCorp={}; GiantCorp.Common={ ... }; GiantCorp.ErrorCodes={ ... }; GiantCorp.PageHandler={ ... };
单体模式中使用闭包(又称为模块模式)
MyNamespace.Singleton=(function(){ var privateAttribute1=false; var privateAttribute2=[1,2,3]; function privateMethod1(){ ... }; function privateMethod2(args){ ... }; return{ publicAttribute1=true, publicAttribute2=10, publicMethod1=function(){ ... }, publicMethod2=function(){ ... } }; })();
惰性实例化(将实例化推迟到需要的时候)
MyNamespace.Singleton=(function(){ function constructor(){//放到闭包中 var privateAttribute1=false; var privateAttribute2=[1,2,3]; function privateMethod1(){ ... }; function privateMethod2(args){ ... }; return{ publicAttribute1=true, publicAttribute2=10, publicMethod1=function(){ ... }, publicMethod2=function(){ ... } } }; return{//公共方法 getInstance:function(){ ... } } })();
加上一个开关(若未实例则实例一次,已经实例就返回这个实例)
Mynamespace.Singleton=(function(){ var uniqueInstance; function constructor(){ ... }; return{ getInstance:function(){ if(!uniqueInstance){ uniqueInstance=constructor(); } return uniqueInstance; } } })(); //Mynamespace.Singleton.getInstance.publicMethod1();
分支(创建多个对象字面量,根据某种条件赋给那个变量)
MyNamespace.Singleton=(function(){ var objectA={ method1:function(){ ... }, method2:function(){ ... } }; var objectB={ method1:function(){ ... }, method2:function(){ ... } }; return (someCondition)?objectA:objectB; })();
标签:
原文地址:http://www.cnblogs.com/sdgjytu/p/4220172.html