介绍
※ 系统中被唯一使用
※ 一个类只有一个实例
说明
◆ 单例模式需要用到java的特性(private)
◆ ES6 中没有(typescript除外)
◆ 只能用javascript变相实现
实现代码(ES6)
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() //login...
let obj2 = SingLeObject.getInstance();
obj2.login() //login...
console.log(obj1 === obj2) //true 唯一实例
console.log('---------------------------------')
let obj3 = new SingLeObject() //虽然可以new 这里无法控制,只能人为约束
obj3.login() //login...
console.log(obj1 === obj3) //false 不是同一个实例
其他
◆ 购物车(和登录框类似)
◆ vuex 和 redux中的store
设计原则
● 符合单一 职责原则,只实例化唯一的对象
● 没法具体开放封闭原则,但是绝对不违反开放封闭原则