HarmonyOS 鸿蒙Next 单例的正确写法

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 单例的正确写法

单例的几种形式,麻烦给出几个官方建议写法,能多模块使用对象内存地址不变的

用到的有:

一: export default new DaoProcess()

二: 懒汉模式: public static getInstance(): Singleton (这种发现会出现内存地址不一样,也就是没法实现多模块公用单例)

三: 另外网上看到另一种异步锁形式的懒汉模式,需要加"use shared"和@Sendable

class Singleton {
  private static instance: Singleton;

  private constructor() {
    // 私有构造函数,防止外部直接新建实例
  }

  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
}

这个例子中,单例对象的地址并不是同一个


更多关于HarmonyOS 鸿蒙Next 单例的正确写法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。

EntryAbility 中执行 SingleInstance.getInstance().init('ability 中初始化的值') 方法,相当于对Hap包中引用的Har包进行了初始化,而Hsp包中引用的Har并没有初始化。

如果您想要以共享的方式使用:可以将SingleInstance单例放在Hsp包中,Hap、Har包分别引用Hsp包。

如果您只想在Har中使用SingleInstance单例:可以在demo的基础上在Hsp包中新增初始化SingleInstance方法,导出后使用。

  • 以上是初步分析结论,如有疑问可以展开回复,看到后会继续协助定位阻碍点。
  • 开源网站上收录了UI、系统接口、Web、创新特性等场景化鸿蒙示例DEMO,开发中可以参考:https://gitee.com/scenario-samples/demo-index

更多关于HarmonyOS 鸿蒙Next 单例的正确写法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中实现单例模式,通常需要确保一个类只有一个实例,并提供一个全局访问点。以下是一个简单的示例,展示了在HarmonyOS中如何正确编写单例模式:

// Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H

class Singleton {
public:
    // 禁用拷贝构造和赋值运算符
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    // 提供全局访问点
    static Singleton& GetInstance() {
        static Singleton instance; // 局部静态变量,保证只初始化一次
        return instance;
    }

    // 其他成员函数
    void SomeFunction() {
        // 实现功能
    }

private:
    // 私有构造函数,防止外部实例化
    Singleton() {}
};

#endif // SINGLETON_H

在这个示例中,Singleton类的构造函数被声明为私有,从而防止了外部直接实例化。同时,拷贝构造和赋值运算符被删除,以确保类的唯一实例。GetInstance方法提供了一个全局访问点,它返回一个对唯一实例的引用。这个方法内的静态局部变量instance确保了在程序的生命周期内只会被初始化一次。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部