老哥们,HarmonyOS鸿蒙Next中你们单例用哪种写法

老哥们,HarmonyOS鸿蒙Next中你们单例用哪种写法 这两种方式都能实现单例,我平时偷懒用的A。我看官方示例代码一般用的B。你们平时用的哪种,这两种有什么优缺点吗?

class A {
  constructor() {
    console.log('A init');
  }
  test() {
    console.log('A.test()')
  }
}
export default new A()

export class B {
  private constructor() {
    console.log('B init');
  }
  private static instance: B
  static getInstance(): B {
    if(!this.instance) {
      this.instance = new B()
    }
    return this.instance
  }
  test() {
    console.log('B.test()')
  }
}
4 回复

B现在没有提示this不可用吗?

Using “this” inside stand-alone functions is not supported

更多关于老哥们,HarmonyOS鸿蒙Next中你们单例用哪种写法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我一般用B

在HarmonyOS鸿蒙Next中,单例模式的实现可以通过Kotlin的object关键字来实现。Kotlin中的object声明本身就是单例的,因此可以直接使用它来创建单例对象。以下是一个简单的示例:

object Singleton {
    fun doSomething() {
        // 单例对象的方法实现
    }
}

在需要使用单例的地方,可以直接通过Singleton来访问:

Singleton.doSomething()

这种方式简洁且线程安全,Kotlin会确保object声明的单例对象在整个应用程序生命周期内只存在一个实例。

在HarmonyOS鸿蒙Next中,推荐使用双重检查锁定(Double-Checked Locking)来实现单例模式,以确保线程安全且高效。代码如下:

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

这种写法既能保证线程安全,又能避免不必要的同步开销,适合HarmonyOS开发。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!