单例(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);
优点
划分命名空间
,减少全局变量增强模块性
,把自己的代码
组织在一个全局变量
名下,放在单一位置,便于维护- 且只会
实例化一次
。简化了代码的调试和维护
缺点
-
由于单例模式提供的是一种单点访问,所以它有可能导致模块间的强耦合 从而不利于
单元测试
。 -
无法单独测试一个调用了
来自单例的方法的类
,而只能把它与那个单例
作为一个单元一起测试。
场景
- 定义命名空间和实现分支型方法
- 登录框
- vuex 和 redux中的store