Skip to main content

单例模式

单例模式

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

单例模式即一个类只能构造出唯一实例,单例模式的意义在于共享、唯一,Redux/Vuex中的store、jQuery的$或者业务场景中的购物车、登录框都是单例模式的应用

class SingletonLogin {
constructor(name, password) {
this.name = name
this.password = password
}
static getInstance(name, password) {
//判断对象是否已经被创建,若创建则返回旧对象
if (!this.instance) this.instance = new SingletonLogin(name, password)
return this.instance
}
}
let obj1 = SingletonLogin.getInstance('CXK', '123')
let obj2 = SingletonLogin.getInstance('CXK', '321')
console.log(obj1 === obj2) // true
console.log(obj1) // {name:CXK,password:123}
console.log(obj2) // 输出的依然是{ name:CXK,password: 123}

应用:

  • 线程池
  • 全局缓存
  • 浏览器中的window对象等

JavaScript中,通过全局变量来实现单例模式,但是全局变量带来命名污染的问题,解决方案如下:

1.使用命名空间

var namespace1 = {
a: function () {
alert(1);
},
b: function () {
alert(2);
}
}

2.使用闭包封装私有变量

var user = (function () {
var _name = 'sven', _age = 29;
return {
getUserInfo: function () {
return _name + '-' + '_age';
}
}
})