介绍:
- 一个类只有一个实例
- 系统中被唯一使用
应用场景:
- jQuery中只有一个’$’
if(Window.jQuery != null) {
return Window.jQuery
}else {
//初始化
}
- 登录框
- 购物车
- 连接数据库的连接操作(这样可以提高效率)
JavaScript中使用单例模式的缺点
没有强制要求不能使用new 类的形式(实际上只能通过类.静态函数
的方式),如果用了也不会报错,但是没有应用到单例模式,只能通过文档说明的方式来要求,所有JavaScript是勉强实现的单例模式
代码实现
- 通过闭包的形式来保存实例:
class SingleObject {
login() {
console.log('login...')
}
}
SingleObject.getInstance = (function () {
let instance
return function () {
if (!instance) {
instance = new SingleObject();
}
return instance
}
})()
// 测试
let obj1 = SingleObject.getInstance()
obj1.login()
let obj2 = SingleObject.getInstance()
obj2.login()
console.log(obj1 === obj2)
- 在类中直接点对象的形式来保存实例:
// 单例模式
class DB {
constructor () {
console.log('构造函数执行')
}
static getInstance () {
if (!DB.instance) {
DB.instance = new DB()
}
return DB.instance
}
connect () {
console.log('连接数据库')
}
}
let myDb1 = DB.getInstance()
let myDb2 = DB.getInstance()
console.log('myDb1 === myDb2',myDb1 === myDb2)