鸿蒙开发5.0【基于单例实现跨线程缓存】

单例的使用场景很多,如可以通过单例实现应用缓存,这样多个线程统一对一块内存进行读写数据,既保障了数据的唯一性,又提高了业务处理性能。又比如使用单例实现应用的全局配置管理,保障全局有且仅有一个配置管理对象。

单例模式简介

单例是设计模式使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中(单进程),一个类只产生一个实例。它的优势在于:

  1. 对于频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;
  2. 由于new操作的次数减少,因此对系统内存的使用频率也会降低,这样将减少GC压力。

严格来说单例模式与并行没有直接的关系,是因为它太常见了,在应用开发的过程中将不可避免的会在多线程环境中使用到它。

创建一个单例类

由于单例类需要在多个模块间使用,因此单例类的本质是一个Sendable共享对象,创建一个单例类型最常用的有饿汉式和懒汉式,除此之外还有双重检查模式(这个不在本文中介绍)

注意:单例类需要使用[“use shared”]指令来标记,"use shared"需写在import语句之后,其他语句之前。

饿汉式

饿汉式:此种方式在类加载时,静态实例instance就已经创建并初始化好了。(这种方式当前有BUG,待BUG修复后删除此说明

"use shared"

@Sendable

export class SingletonClassE {

static instance: SingletonClassE = new SingletonClassE();



private constructor() {

}



public doSomething() {

}

}



//使用方式

function doSomething() {

SingletonClassE.instance.doSomething()

}

此处没有将instance申明为private类型并提供getInstance静态方法,得益于ArkTS的语法校验,外界无法通过SingletonClass.instance = null/undefined/new SingletonClass()的方式给instance实例赋值。

根据使用习惯,也可以将instance申明为private类型,并提供静态方法getInstance()获取instance实例。

"use shared"

@Sendable

export class SingletonClassE {

private static instance : SingletonClassE = new SingletonClassE();



private constructor() {

}



public static getInstance() : SingletonClassE {

if (!SingletonClassE.instance) {

SingletonClassE.instance = new SingletonClassE();

}

return SingletonClassE.instance;

}



public doSomething() {

}

}



//使用方式

function doSomething() {

SingletonClassE.getInstance().doSomething()

}
</
### 鸿蒙系统5.0中的Java开发教程与API文档 鸿蒙操作系统(HarmonyOS)支持多种编程语言进行应用开发,其中包括JavaScript、Java以及其他主流语言。对于希望使用Java进行开发开发者来说,可以参考官方提供的学习资源和工具来构建环境并实现功能。 #### 构建HarmonyOS开发环境 为了在鸿蒙系统上进行Java开发,首先需要搭建适合的开发环境。这一步骤可以通过官方指南完成[^1]。具体而言,开发者应下载并安装DevEco Studio——这是华为专门为HarmonyOS开发者设计的一体化开发平台。通过该IDE,不仅可以创建新项目,还能管理依赖项以及调试应用程序。 #### 学习资料获取途径 针对深入理解HarmonyOS及其特性方面的需求,“纯血版鸿蒙全套学习文档”提供了详尽的内容覆盖从基础概念到高级技术实践等多个层面的知识点[^2]。这套材料包含了丰富的教学视频、详细的说明文件和技术博客链接等多形式的学习素材,非常适合初学者入门或者有经验工程师进一步提升技能水平之用。 #### Gradle配置实分析 当涉及到实际编码阶段时,在Gradle脚本里正确设置项目的依赖关系显得尤为重要。下面展示了一段典型的`build.gradle`文件片段用于示范如何引入外部库文件(.jar/.har)[^3]: ```groovy dependencies { entryImplementation project(':entry') implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) testCompile 'junit:junit:4.12' } ``` 上述代码展示了几个关键部分: - `entryImplementation project(':entry')`: 表明当前module会依赖另一个名为':entry' 的子project. - `implementation fileTree(...)`: 定义了一个目录(`libs`)作为查找本地二进制包的地方,并指定了哪些扩展名会被考虑进去。 - 测试框架JUnit被指定版本号为4.12并通过`testCompile`关键字关联起来供元测试用途。 #### 自定义UI组件案分享 除了基本的功能实现外,美化界面也是吸引用户的必要手段之一。如制作一个圆形头像显示效果,则需遵循特定的设计原则同时配合相应的布局参数调整才能达到理想视觉呈现效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值