javascript设计模式之单例模式

          单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。

          在JavaScript里,实现单例的方式有很多种,其中最简单的一个方式是使用对象字面量的方法,其字面量里可以包含大量的属性和方法:

     

var mySingleton = {
    property1: "something",
    property2: "something else",
    method1: function () {
        console.log('hello world');
    }
};

          如果以后要扩展该对象,你可以添加自己的私有成员和方法,然后使用闭包在其内部封装这些变量和函数声明。只暴露你想暴露的public成员和方法,样例代码如下:

 

 

<script>

    function objZim() {
        var single = mySingleton();
        single.publicMethod();
        alert(single.publicVar);
    }

    var mySingleton = function() {
        /*这里申明私有变量和方法*/
        var privateVariable = 'something private';

        function showPrivate() {
            alert(privateVariable);
        }

/*公有变量和方法(可以访问私有变量和方法)*/
        return {
            publicMethod: function() {
                showPrivate();
            },
            publicVar: 'the public can see this'
        };
    }
</script>

           但如果我们想做到只有在使用的时候才初始化,那该如何做呢?为了节约资源的目的,我们可以另外一个构造函数里来初始化这些代码,如下:

 

<script>
    
    /*只有在使用的时候才初始化*/
    var Singleton = (function() {
        var instantiated;
        /*创建私有方法*/
        function init() {
            return {
                publicMethod: function() {
                    alert("hello word");
                },
                pubicProperty: 'test'
            };
        }
        return {
            getInstance:function() {
                if (!instantiated) {
                    instantiated = init();
                }
                return instantiated;
            }
        }
    })();
    Singleton.getInstance().publicMethod();
</script>

 

你可能感兴趣的:(JavaScript)