介绍
- 系统中被唯一使用
- 一个类只有一个实例
示例
- 登录框
- 购物车
在JS中如何使用单例模式:
class SingleObject {
login() {
console.log('login...')
}
}
// 使用闭包
SingleObject.getInstance = (function(){
let instance;
return function () {
if (!instance) {
instance = new SingleObject();
}
return instance;
}
})()
// 测试:注意这里只能使用静态函数getInstance,不能new SingleObject()
let obj1 = SingleObject.getInstance();
obj1.login();
let obj2 = SingleObject.getInstance();
obj2.login();
console.log(obj1 === obj2); // 两者必须完全相等 true
console.log('--------分割线--------')
let obj3 = new SingleObject();
obj3.login();
console.log(obj1 === obj3); // false
// 但是这里我们只能靠文档去约束,因为这里就算new一个SingleObject也不会报错。
// 但是在使用上会有错误。
所以可以看出,JS虽然也能完成单例模式,但是并不能完整的实现。
场景
- jQuery只有一个$
// jQuery 只有一个$
if (window.jQuery != null) {
return window.jQuery
} else {
// 初始化实例
}
vuex和redux里的store也是属于单例模式。
公众号:Coder 杂谈,欢迎关注