首页 > 代码库 > 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