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)