某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例。vue
建立对象和管理单例的职责被分布在两个不一样的方法中,这两个方法组合起来才具备单例模式的威力。vuex
使用闭包实现:redux
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);
复制代码
划分命名空间
,减小全局变量加强模块性
,把本身的代码
组织在一个全局变量
名下,放在单一位置,便于维护实例化一次
。简化了代码的调试和维护因为单例模式提供的是一种单点访问,因此它有可能致使模块间的强耦合 从而不利于单元测试
。markdown
没法单独测试一个调用了来自单例的方法的类
,而只能把它与那个单例
做为一个单元一块儿测试。闭包