• 使用场景
    单例模式的优点主要体现在节省内存,始终只使用一个实例,所用到的场景也往往是,虽然实例可能会被多次使用,但每次使用都是独立发生的,而不是同时进行的。
  • 个人简单理解

    单例模式就是创建一个唯一的类的实例。如果该实例没有被创建,创建该实例;否则返回已经被创建的实例。

  • 根据上面的理解,创建一个简单的单例模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    var SingleTon = (function () {
    var instance; // 创建一个单例模式的实例变量
    function init () {
    // 创建私有变量以及私有方法
    var privateVar = '私有变量',
    privateNum =Math.random();
    function privateMethod () {
    console.log('私有方法');
    }

    return {
    // 公有变量以及公有方法
    publicVar: '公有变量',
    publicMethod: function() {
    console.log('公有方法')
    },
    getNum: function () { // 公有方法,访问私有变量
    return privateNum;
    }
    }
    }
    return {
    getInstance: function () {
    if (!instance) {
    instance = init();
    }
    return instance;
    }
    }
    })()
  • 下面我们分别在控制台执行下面得代码

    1
    2
    3
    4
    var instance1 = SingleTon.getInstance();
    var instance2 = SingleTon.getInstance();
    console.log(instance1);
    console.log(instance2);

    运行结果如下所示:

  • 接下来我们来看一下两个对象是否是同一个对象:我们使用全等运算符来比较

    1
    2
    // 在控制台输出以下代码
    console.log(instance1 === instance2);
  • 运行结果如下所示

    控制台输出true。说明两个对象是同一个对象。