美文网首页
单例模式

单例模式

作者: 言叶丶 | 来源:发表于2017-02-20 14:22 被阅读0次

    单例模式

    定义

    保证一个类只有一个实例,并提供一个访问他的全局访问点

    实现单例模式
    function Single (name) {
        this.name = name;
    }
    
    Single.prototype.getName = function () {
        console.log(this.name);
    }
    
    Single.getSingle = (function () {
        var instance = null;
    
        return function (name) {
            if (!instance) {
                instance = new Single(name); 
            }
    
            return instance;
        }
    })()
    
    var instance1 = Single.getSingle('instance1');
    var instance2 = Single.getSingle('instance2');
    instance1.getName(); // instance1
    instance2.getName(); // instance2
    
    全局变量不是单例模式

    var a = {}
    当用这种方式创建对象a时,象 a 确实是独一无二的。 如果 a 变量被声明在全局作用域下,则我们可以在代码中的任何位置使用这个变量。样就
    满足了单例模式的两个条件
    全局变量会污染命名空间, 应尽量减少全局变量的使用

    使用命名空间可以减少全局变量的数量。
    var namespace1 = {
        a: function(){
            alert (1);
        },
         b: function(){
            alert (2);
        }
    };
    
    使用闭包封装私有变量
    var user = (function () {
        var _name = 'wang', _age = '17';
    
        return function () {
            console.log(_name, _age);
        }
    })()
    
    单例模式的缺点
    1. 可扩展性差
    2. 灵活性差
    3. js中对象是存储在内存中的一块中
    var a = {'name': 'wang', 'age': 2};
    var b = a;
    b.name = 'xu';
    console.log(a.name); // xu
    //a 和 b存储的都是{'name': 'wang', 'age': 2}在内存在存储地址, 改变b也会导致a发生改变
    

    相关文章

      网友评论

          本文标题:单例模式

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