单例模式
单例模式
单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
单例模式即一个类只能构造出唯一实例,单例模式的意义在于共享、唯一,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';
}
}
})