HarmonyOS鸿蒙Next中单例对象

HarmonyOS鸿蒙Next中单例对象 我像ts那样创建单例对象的话,在不同的page里面引入,这个对象在应用的生命周期中是唯一的么

3 回复

单例只有在同一个流程中才有效,换了页面后之前的实例都全是undefined。

对于每个Page都会生成一个js文件,定义的单例会在每个js中都生成一份,所以单例的作用范围只是Page的范围。

如果想共享一个实例,创建范围需要提升至UIAbility或者App级别。

除了多线程使用单例和单例所在har同时被hap和hsp引用等特殊情况,单例对象在应用的生命周期中是唯一。

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


在HarmonyOS鸿蒙Next中,单例对象是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点。鸿蒙Next中单例对象的实现通常涉及以下几个关键点:

  • 私有构造函数:单例类的构造函数必须是私有的,以防止外部直接创建实例。
  • 静态实例:单例类内部维护一个静态的、私有的实例引用。
  • 静态获取方法:提供一个公有的静态方法(如getInstance()),用于获取单例实例。
  • 线程安全:在多线程环境下,确保单例实例的创建是线程安全的。可以通过双重检查锁定(Double-Checked Locking)或静态内部类来实现线程安全。

以下是一个简单的单例模式示例代码:

class Singleton {
    private static instance: Singleton;

    private constructor() {
        // 私有构造函数
    }

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

在鸿蒙Next中,单例对象的应用场景包括管理全局状态、共享资源或服务等。通过单例模式,可以确保这些对象在整个应用生命周期中只有一个实例,从而避免资源浪费和不一致性问题。

在HarmonyOS鸿蒙Next中,单例模式可以通过以下方式实现:

  1. 静态内部类: 使用静态内部类实现单例,确保线程安全且延迟加载。

    public class Singleton {
        private Singleton() {}
        private static class Holder {
            private static final Singleton INSTANCE = new Singleton();
        }
        public static Singleton getInstance() {
            return Holder.INSTANCE;
        }
    }
    
  2. 双重检查锁定: 使用双重检查锁定确保线程安全,同时减少同步开销。

    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鸿蒙Next,确保单例对象的唯一性和线程安全。

回到顶部