介绍

  • 系统中被唯一使用
  • 一个类只有一个实例

UML类图

点击查看【processon】

代码

  1. class SingleObject {
  2. login(){
  3. console.log('login...');
  4. }
  5. }
  6. SingleObject.getInstance = (() => {
  7. let instance
  8. return () => {
  9. if(!instance) {
  10. instance = new SingleObject()
  11. }
  12. return instance
  13. }
  14. })()
  15. const o1 = SingleObject.getInstance()
  16. o1.login()
  17. const o2 = SingleObject.getInstance()
  18. o2.login()
  19. console.log('o1 === o2', o1 === o2)
  20. console.log('------分割线-----')
  21. const o3 = new SingleObject() // 无法完全控制
  22. o3.login()
  23. console.log('o1 === o3', o1 === o3)

场景

  • $

    1. if(window.jQuery != null) {
    2. return window.jQuery
    3. } else {
    4. // 初始化
    5. }
  • 模拟登录框

  • 购物车
  • redux的store
  • vuex的store

设计原则验证

  • 符合SRP,只实例化唯一的对象
  • 没具体体现OCP,但是不违反OCP