介绍
- 系统中被唯一使用
- 一个类只有一个实例
UML类图
代码
class SingleObject {login(){console.log('login...');}}SingleObject.getInstance = (() => {let instancereturn () => {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
