首页 > 代码库 > javascript设计模式6
javascript设计模式6
单体模式:用来划分命名空间而组织一些方法和属性的对象,如果它能被实例化,只能被实例化一次;但对象不是单体
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;})();
javascript设计模式6
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。