js-设计模式 单例模式(使用)

js-设计模式 单例模式(使用)

js中单例模式是一种常用的设计模式 ——所谓的单例模式 字如其名 就是单个实例的一类对象的创建 ,也就是说这个类只有一个实例对象;
简单的例如对象字面量;

var person = {
name : 'ccc',
age : 28
}

这就是一个简单的 单例模式的使用;但是很多时候我们并不这样使用它因为它其中的变量可以从外界通过person实例直接进行; 因为有一些变量是辅助变量,亦或者说是辅助方法我们并不希望全局环境下可以直接访问,也就是说他需要有一些私有变量 在java中有私有变量的定义但是 javascript是一个弱类语言它需要去借助闭包;才能实现类似的私有变量;
关于闭包的相关概念 需要自己了解哦

  var person1 = (function(){
    var name = 'cccc';
    return {
        age:28,
        fun:function(){
          console.log(name);
          //在全局环境下可以直接 person1.fun直接在控制台打印name
        }
    }
})()

像这样对象就会存在一个私有变量 name 它无法直接在全局环境中访问但是 还是可以可以被person1单例对象 内部直接访问 ,以此达到私有变量的效果;
然鹅 。。。。。这些还不够 这样还是会出现缺点 。。。因为闭包会增加全局变量并且 不过是否使用闭包 这样的单例会直接在解析时加载 占用内存 或许你都不一定会用到这个单例。。。 因此 大神们发现了惰性加载 ;
惰性加载 就是指只有该对象实例只有在用到的时候才会被加载;如果没有用到就不会被加载; 这样就能大大的节省内存。 (大神就是大神想天下前端人员所想 ) 。。。。
示例代码如下

  var person2 = (function(){
        function creatPerson2(){      //创建单例对象的方法
            var name = 'cccc';
            return {
                age:28,
                fun:function(){
                  console.log(name);
                }
            }
        }
        var instance = null;
        return {
                    getInstance: function () {
                    if(!instance) {
                        instance = creatPerson2();
                    }
                    return instance;
                    }
        }
})()

其中 creatPerson2 就是创建这个实例的 instance 变量就代表了这个实例对象; 在return的对象中有公开的方法 就是 getInstance() 在person2去调用这个方法时直接判断 instance 这个对象是否存在如果不存在就创建一个 person2的真正实例; 如果存在就不创建;
这样的话这个单例的对象只有在用的时候才会被创建,因此大大的节省内存的使用;
这就是单例模式的使用 希望各位同志可一学到一些东西哦;

猜你喜欢

转载自blog.csdn.net/anyu_xin/article/details/77150268