介绍
- 系统中被唯一使用
- 一个类只有一个实例
UML类图
代码
class SingleObject {
login(){
console.log('login...');
}
}
SingleObject.getInstance = (() => {
let instance
return () => {
if(!instance) {
instance = new SingleObject()
}
return instance
}
})()
const o1 = SingleObject.getInstance()
o1.login()
const o2 = SingleObject.getInstance()
o2.login()
console.log('o1 === o2', o1 === o2)
console.log('------分割线-----')
const o3 = new SingleObject() // 无法完全控制
o3.login()
console.log('o1 === o3', o1 === o3)
场景
$
if(window.jQuery != null) {
return window.jQuery
} else {
// 初始化
}
模拟登录框
- 购物车
- redux的store
- vuex的store
设计原则验证
- 符合SRP,只实例化唯一的对象
- 没具体体现OCP,但是不违反OCP