# Singleton 单例模式
类的实例化次数只能是一次。
var mySingleton = (function () {
// 实例保持了 singleton 的一个引用
var instance
function init () {
// Singleton
// 私有方法和变量
function privateMethod () {
console.log('i am private')
}
var privateVar = 'I am also private'
var privateRandomNumber = Math.random() // 只会执行一次,声明时被执行,除非再次 init 才会重新初始化
return {
publicMethod: function () {
console.log('the public can see me!')
},
publicProperty: 'I am also public',
getRandomNumber: function () {
return privateRandomNumber
}
}
}
return {
// 获取 Singleton 实例,如果存在就返回,不存在就创建
getInstance: function () {
if (!instance) {
instance = init()
}
return instance
}
}
})()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
使用:
var singleA = mySingleton.getInstance()
var singleB = mySingleton.getInstance()
console.log(singleA.getRandomNumber() === singleB.getRandomNumber()) // true
console.log(singleA.getRandomNumber()) // 0.8918236967621893
console.log(singleB.getRandomNumber()) // 0.8918236967621893
console.log(singleA.getRandomNumber()) // 0.8918236967621893
console.log(singleB.getRandomNumber()) // 0.8918236967621893
1
2
3
4
5
6
7
2
3
4
5
6
7