鸿蒙 Next 实现单例

devtools/2025/3/18 2:06:57/

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

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


http://www.ppmy.cn/devtools/167964.html

相关文章

自动化测试 | Python+PyCharm+Google Chrome+Selenium 环境安装记录

目录 环境版本 浏览器与驱动 Python 安装 测试 PyCharm 安装 开启软件 开始破解 Selenium 安装 测试 自动化的其实就是模拟手工点击的方式 环境版本 Python:3.11.8 PyCharm:2021.1.3 Selenium:x.x 浏览器与驱动 114.0.5735.90 …

Django部署Filemanagement

Pycharm搭建项目安装虚拟环境 mysqlclient对mysql的安装,配置有要求 pymsql伪装成mysqlclient,pymysql可以操纵mysql pip install pymysql操作sql5.7 mysql8.0会出现与pycharm不兼容问题,会报错,所以降到5.7 # 进入mysql 需要…

Chrome 扩展开发 API实战:Tabs(九)

1. 引言 本文为您提供 chrome.cookies API 的全面指南,包括其功能、使用方法以及详细示例。无论您是初学者还是经验丰富的开发者,这篇文章都能帮助您高效管理和操作 Chrome 扩展中的 cookies。 2. 权限声明 在 manifest.json 文件中声明所需的权限&am…

【漫话机器学习系列】136.随机变量(Random Variable)

详解随机变量(Random Variable) 1. 引言 在概率论和统计学中,随机变量(Random Variable)是一个基本概念,它描述了实验结果的不确定性。简单来说,随机变量是一个数值变量,它的取值依…

机器学习 [白板推导](N)[谱聚类、前馈神经网络]

​ 21. 谱聚类(Spectral Clustering) 21.1. 背景 ​  在高斯混合模型中,假设样本有多个类别,每个类内数据遵从不同的高斯分布。但在某些数据中(如下图),其并不具有类似高斯分布的特性&…

股指期货有卖不出去的时候吗?

在股指期货的交易世界里,很多人都有这样的疑问:股指期货会不会有卖不出去的时候呢?答案是会的,下面咱们就来详细唠唠为啥会出现这种情况。 市场极端行情下难以卖出 1.跌停限制:股指期货和股票一样,也有涨…

深度学习部署到小程序

1.小程序 2.安装环境,创建虚拟环境 3.深度学习小程序版环境安装-CSDN博客

【数学建模】一致矩阵的应用及其在层次分析法(AHP)中的性质

一致矩阵在层次分析法(AHP)中的应用与性质 在层次分析法(AHP)中,一致矩阵是判断矩阵的一种理想状态,它反映了决策者判断的完全合理性和一致性,也就是为了避免决策者认为“A比B重要,B比C重要,但是C又比A重要”的矛盾。…