【3分钟热度】单例模式应用场景

110 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

介绍

引用下菜鸟教程的一段介绍👇🏻

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

大白话来说,就是一类一对象,至于为什么这样做,从两个方面来看:

  1. 性能上的问题,对象创建消耗资源大,例如一些地图sdk是提供单例来使用
  2. 方便管理,一些场景使用单个对象统一管理即可

业务场景

该场景主要是从第二方面来介绍单例使用

背景:项目中有多个不同业务,没办法很好的去统一api模块(即是项目中的apis目录)使用,也就是说,会存在一个项目多个axios去对应不同的业务,但是因为登录是已经是 打通的了,抽成一个Login类,势必每个要登录逻辑的页面都需要一个该对象来处理,但是为了更好维护项目登录状态的统一性,只初始化一个对象更符合当前业务场景。

转换成单例

// 登录类
class Login {
    login () {}
}

上面的登录类只需要稍作修改就可以变一个单例

方法一:通过函数包装

function getSingleton() {
    let single
    return function(name, commonData) {
        if (single) {
          return single
        } else {
          return (single = new Login())
        }
      }
}
export default singleton()

方法二:静态方法

class Login {
    static single = null
    static getSingleton () {
        if (Login.single) {
          return Login.single
        } else {
          return (Login.single = new Login())
        }
    }
}