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 类中创建单例,确保了懒加载和线程安全性。

复制代码
相关推荐
李白你好14 小时前
Bypass_Webshell webshell编码工具 支持 jsp net php asp编码免杀
开发语言·php
feifeigo12314 小时前
C#中实现控件拖动功能
开发语言·c#
曹牧14 小时前
C#:List<string>类型的集合转换成用逗号分隔的字符串
开发语言·c#·list
fengfuyao98514 小时前
基于C# WinForm的收银管理系统实现
开发语言·c#
05大叔14 小时前
苍穹外买Day05
java·开发语言
代码or搬砖14 小时前
Java集合-List讲解
java·开发语言·list
阿里嘎多学长14 小时前
2025-12-15 GitHub 热点项目精选
开发语言·程序员·github·代码托管
一只乔哇噻14 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day63)
java·开发语言·人工智能·python·语言模型
小白学大数据14 小时前
从爬取到分析:使用 Pandas 处理头条问答数据
开发语言·爬虫·python·pandas
爱吃大芒果14 小时前
Flutter 状态管理全家桶:Provider、Bloc、GetX 实战对比
开发语言·前端·javascript·flutter·华为·ecmascript