欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 鸿蒙 Next 实现单例

鸿蒙 Next 实现单例

2025/3/17 17:55:48 来源:https://blog.csdn.net/lbcyllqj/article/details/146251735  浏览:    关键词:鸿蒙 Next 实现单例

鸿蒙 Next 实现单例

在鸿蒙 Next 开发中,单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。本文将详细介绍如何在鸿蒙 Next 中实现单例模式,并提供几种常见的实现方式。

一、单例模式的实现方式

(一)基本写法

这是最简单的单例实现方式,通过静态变量和私有构造函数来确保只有一个实例。

class Singleton {private static instance: Singleton | null = null;private constructor() {}public static getInstance(): Singleton {if (!Singleton.instance) {Singleton.instance = new Singleton();}return Singleton.instance;}
}

(二)饿汉式单例

饿汉式单例在类加载时就创建实例,适用于实例创建成本较低的场景。

export class Singleton {private static instance = new Singleton();private constructor() {}public static getInstance(): Singleton {return Singleton.instance;}
}

(三)懒汉式单例

懒汉式单例在第一次调用 getInstance 时创建实例,适用于实例创建成本较高的场景。

class Singleton {private static instance: Singleton | null = null;private constructor() {}public static getInstance(): Singleton {if (!Singleton.instance) {Singleton.instance = new Singleton();}return Singleton.instance;}
}

(四)双重检查锁定

双重检查锁定是一种线程安全的单例实现方式,适用于多线程环境。

export class Singleton {private static instance: Singleton;private constructor() {}public static getInstance(): Singleton {if (!Singleton.instance) {synchronized(Singleton) {if (!Singleton.instance) {Singleton.instance = new Singleton();}}}return Singleton.instance;}
}

(五)静态内部类单例

静态内部类单例利用了类加载机制来保证线程安全。

export class Singleton {private constructor() {}private static class SingletonHolder {static readonly instance = new Singleton();}public static getInstance(): Singleton {return SingletonHolder.instance;}
}

二、多线程环境下的单例

在多线程环境下,确保单例的线程安全性至关重要。可以使用双重检查锁定或静态内部类来实现。

(一)双重检查锁定

export class Singleton {private static instance: Singleton;private constructor() {}public static getInstance(): Singleton {if (!Singleton.instance) {synchronized(Singleton) {if (!Singleton.instance) {Singleton.instance = new Singleton();}}}return Singleton.instance;}
}

(二)静态内部类单例

export class Singleton {private constructor() {}private static class SingletonHolder {static readonly instance = new Singleton();}public static getInstance(): Singleton {return SingletonHolder.instance;}
}

三、跨模块共享单例

在鸿蒙 Next 中,跨模块共享单例需要确保不同模块访问到的是同一个实例。可以通过将单例放在 HSP 包中,让其他模块引用。

// HSP 包中的单例
class Singleton {private static instance: Singleton | null = null;private constructor() {}public static getInstance(): Singleton {if (!Singleton.instance) {Singleton.instance = new Singleton();}return Singleton.instance;}
}

然后在其他模块中引用这个单例:

import { Singleton } from 'path/to/hsp/package';const singletonInstance = Singleton.getInstance();

四、总结

单例模式在鸿蒙 Next 开发中非常实用,尤其是在管理全局状态、配置信息和资源访问时。通过上述几种实现方式,开发者可以根据具体需求选择合适的单例模式。在多线程环境下,确保线程安全是关键,而跨模块共享单例则需要合理组织代码结构。

希望本文能帮助你更好地理解和实现单例模式。如果有任何问题或需要进一步讨论,欢迎随时交流!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词