创见博客
实现一个单例模式类
七崽爱吃小饼干2026/03/06阅读 1

ES6 Class 单例

特点:语法简洁、线程安全、无论 new 多少次都返回同一个实例。

javascript
class Singleton{
  private static instance: null | Singleton = null
  private constructor(){ // 不想让别人使用new方法,可以将constructor变成私有的
      // 或者可以通过这种方式,让new方法直接返回已经创建好的实例
      if(Singleton.instance) return Singleton.instance
      Singleton.instance = new Singleton()
      return Singleton.instance
  }
  public static getInstance = () => {
    if(!Singleton.instance) return Singleton.instance = new Singleton();
    return Singleton.instance
  }
}

console.log(Singleton.getInstance() instanceof Singleton)

测试验证

javascript
const s1 = new Singleton();
const s2 = new Singleton();
const s3 = new Singleton();

console.log(s1 === s2); // true
console.log(s2 === s3); // true

s1.sayHello(); // 同一个 ID
s2.sayHello(); // 同一个 ID

核心原理

  1. 用静态属性保存唯一实例
  2. 构造函数里判断是否已存在实例
  3. 存在就直接返回,不存在才创建
  4. 最终保证全局永远只有一个对象
评论
0/100