美文网首页
单例模式

单例模式

作者: 星月西 | 来源:发表于2017-05-02 21:35 被阅读31次

    1.核心

    单例模式的核心是确保只有一个实例,并提供全局访问。
    因此,一个全局变量就可以当成一个单例模式来使用,但是这样容易污染全局空间,可以通过使用命名空间和使用闭包来封装私有变量来减少污染。

    //使用立即执行函数和闭包创建出私有变量
        var user=(function(){
            var name='jc';
            return {
                print: function(){
                    console.log(name);
                }
            };
        })();
        user.print();
    

    2.惰性单例

    惰性单例是指在需要的时候才创建对象实例,例如,页面上的一个单例元素,可以在使用的时候才去创建它,而不是页面加载好的时候就去创建它,或者还可以用无限滚动的思想。

    //使用闭包实现私有变量表示单例是否被创建
        var createLoginLayer=(function(){
            var div;
            return function(){
                if(!div){
                    div=document.createElement('div');
                    document.body.appendChild(div);
                }
                return div;
            }
        })();
        var login=createLoginLayer();
    

    但是这种实现方式上,违反了单一职责原则,应该将创建一个对象和单例模式分开来实现,有利于代码的复用。因此,需要将不变的单例模式代码抽取出来。

    /**
         * 创建一个获取单例的函数,传入的fn为创建对象的方法
         */
        function getInstance(fn){
            var res;
            return function(){
                if(!res){
                    res=fn();
                }
                return res;
            }
        }
    

    这个实现单例模式的函数,还可以用来使一个有返回值的函数仅执行一次,可以用来保证仅加载一次数据。

    相关文章

      网友评论

          本文标题:单例模式

          本文链接:https://www.haomeiwen.com/subject/bcyhtxtx.html