zoukankan      html  css  js  c++  java
  • 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;
    })();
  • 相关阅读:
    vbr mp3
    NDK setup error
    转载 MPEG2视频解码在ARM11上的优化
    arm程序设计优化
    小情歌
    android update project
    Linux环境下的DNW使用
    2010的计划
    Setting up UDEV rules to grant access to your phone
    Debugging Native Code for android
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/4220172.html
Copyright © 2011-2022 走看看