kotlin 单例

1.使用伴生对象(companion object):

class Singleton private constructor() {

companion object {

private val instance: Singleton by lazy { Singleton() }

fun getInstance(): Singleton {

return instance

}

}

// 其他类成员

}

获取实例

val instance = Singleton.getInstance()

这种方式提供了更多的灵活性,可以在伴生对象中定义一些其他的属性和方法

2.使用 object 关键字:

object Singleton {

// 单例的属性和方法

}

获取实例

val instance = Singleton

这种方式简单明了,object 关键字会自动创建单例。可以直接通过 Singleton 访问单例的属性和方法。

3.使用 lazy 委托:

class Singleton private constructor() {

companion object {

val instance: Singleton by lazy { Singleton() }

}

// 其他类成员

}

获取实例

val instance = Singleton.instance

这种方式利用 lazy 委托,确保只有在首次访问 instance 属性时才会初始化单例。

复制代码
4.使用 enum枚举类

enum class Singleton {

INSTANCE;

// 单例的属性和方法

}

获取实例

val instance = Singleton.INSTANCE

枚举类在 Kotlin 中可以用来创建单例,INSTANCE 就是这个单例的实例。

5.双重检查锁定

class Singleton private constructor() {

companion object {

@Volatile

private var instance: Singleton? = null

fun getInstance(): Singleton {

return instance ?: synchronized(this) {

instance ?: Singleton().also { instance = it }

}

}

}

// 其他类成员

}

获取实例

val instance = Singleton.getInstance()

这种方式在多线程环境下保证了懒加载的线程安全性,避免了每次获取实例都进行同步。

6.使用 Holder 模式:

class Singleton private constructor() {

private object Holder {

val INSTANCE = Singleton()

}

companion object {

fun getInstance(): Singleton {

return Holder.INSTANCE

}

}

// 其他类成员

}

获取实例

val instance = Singleton.getInstance()

这种方式通过 Kotlin 的对象声明在 Holder 类中创建单例,确保了懒加载和线程安全性。

复制代码
相关推荐
Evand J1 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter2 小时前
ZPL文件预览
开发语言·c++
YB13756 小时前
kotlin中闭包特性
kotlin
噢,我明白了7 小时前
JAVA中的一些基础应用知识点
java·开发语言
时间的拾荒人8 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
敲上瘾8 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
码途行者10 小时前
网站的SQL 注入:从攻击原理到防御措施
开发语言·sql·php
旖旎夜光10 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
你看我名字10 小时前
产品参数昨天还对,今天已过期:数眼智能与大模型应用如何做资料版本校验
开发语言·架构
老秦包你会11 小时前
计算机网络第二课 ----Socket(套接字)编程预备
开发语言·计算机网络·php