鸿蒙next-实现单例模式

一、基本写法

class Data{
  static instance: Data | null = null
 
    // 设置方法为私有
    private  constructor() {   
  }

  static getInstance() {
    if (!Data.instance) {
      Data.instance = new Data()
    }
    return Data.instance
  }
}

二、饿汉

export class Data {
  private static instance = new Data();
​
  private constructor() {
    // 私有构造函数
  }
​
  public static getInstance(): Data {
    return Data.instance;
  }
}

三、懒汉

class Data{
  static instance: Data | null = null
// 设置方法为私有
  private  constructor() {   
  }
  static getInstance() {
    if (!Data.instance) {
      Data.instance = new Data()
    }
    return Data.instance
  }
}

四、静态内部类单例

export class Data {
  private constructor() {
    // 私有构造函数
  }
​
  private static class Singleton {
    static readonly instance = new Data();
  }
​
  public static getInstance(): Data {
    return Singleton.instance;
  }
}

五、双重检查锁定

export class Data {
  private static instance: Data;
​
  private constructor() {
    // 私有构造函数
  }
​
  public static getInstance(): Data {
    if (!Data.instance) {
      synchronized(Data) {
        if (!Data.instance) {
          Data.instance = new Data();
        }
      }
    }
    return Data.instance;
  }
}

猜你喜欢

转载自blog.csdn.net/LIUCHANGSHUO/article/details/143415938