23种设计模式全面解析 -- 单例模式

343 阅读1分钟

单例(Singleton)模式

某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例。

创建对象和管理单例的职责被分布在两个不同的方法中,这两个方法组合起来才具有单例模式的威力。

使用闭包实现:

const Singleton = function(name) {
  this.name = name;
}

Single.prototype.getName = function() {
 alert(this.name);
}

Singleton.getInatance = (function(name){
  let instance;
  return function(name) {
    if(!instance) {
       instance = new Singleton(name);
    }
    return instance;
  }
})()
var a = Singleton.getInstance('ConardLi');
var b = Singleton.getInatance('ConardLi');
console.log(a === b);

image.png

优点

  • 划分命名空间,减少全局变量
  • 增强模块性,把自己的代码组织在一个全局变量名下,放在单一位置,便于维护
  • 且只会实例化一次。简化了代码的调试和维护

缺点

  • 由于单例模式提供的是一种单点访问,所以它有可能导致模块间的强耦合 从而不利于单元测试

  • 无法单独测试一个调用了来自单例的方法的类,而只能把它与那个单例作为一个单元一起测试。

场景

  • 定义命名空间和实现分支型方法
  • 登录框
  • vuex 和 redux中的store