最近打算看完《JavaScript设计模式与开发实践》,今天先从第一个设计模式开始看并总结出自己的理解。

概念

单例模式:保证一个类仅存有一个实例,并提供一个访问它的全局访问点

优点

  1. 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
  2. 那种需要对DOM进行创建销毁的场景也会提高性能。

    实现

    我觉得单例模式的核心就一句话,下面是伪代码
    let obj = null;
    if(!obj){
        obj = xxx;
    }

1. 面对对象的实现方式

function Singleton(){}
// 要让最终返回的函数执行,返回实例,所以要加立即执行函数
Singleton.prototype.getInstance = (function(){
    var instance = null
    // 使用闭包,将instance这个变量保存在内存中
    return function(){
        if(!instance){
            instance = new Singleton()
        }
        return instance
    }
})()
var a = new Singleton().getInstance()
var b = new Singleton().getInstance()
console.log(a === b); // true

2. JavaScript的实现

let getSingle = function(fn){
    let res = null;
    return function(){
        return res || (res = fn().apply(this, arguments));
    }
}