一个最简单的单例
定义:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。(就是需要自己主动去实列化,并保证你取到的一直是你第一次创建的那个实例)。
2.示例:
class LoginForm {
constructor(){
this.state = 'hide'
}
show(){
if(this.state === 'show'){
console.log('已经显示');
return
}
this.state = 'show';
console.log('登录框已显示')
}
hide(){
if(this.state === 'hide'){
console.log('已经隐藏');
return
}
this.state = 'hide';
console.log('登录框已隐藏')
}
}
LoginForm.getInstance = (function(){
let instance
return function() {
if(!instance){
//其实这里使得类提前实例化,已经可以对齐做一些操作了
instance = new LoginForm();
}
return instance
}
})
//第一次 自己去拿到这个实例对象
let login1 = LoginForm.getInstance();
login1.show(); //打印:登录框显示成功
//第二次 自己去拿到这个实例对象
let login2 = LoginForm.getInstance();
login2.hide(); //打印:登录框隐藏成功
//发现两个相等,所以你懂的
console.log(login1 === login2) // true
从console.log(login1 === login2) 打印结果看出,无论你取多少次,你都一直取的是同一个实例对象,这种模式就是单例(懒汉式),可以是原型链去取这个实例,也可以是通过静态方法实现…
在使用中redux中store,vuex都有单例的使用
参考文档
链接: 前端设计模式(一):单例模式