当前位置: 首页 > news >正文

Kotlin 5种单例模式

在Kotlin中实现单例模式有多种方法,以下是几种常见的方法:

  1. 饿汉式
    饿汉式是最简单的一种实现方式,在类加载时就完成了实例的初始化。
//饿汉式
object Singleton1 {
    fun printMessage() {
        println("===饿汉式")
    }
}
  1. 懒汉式
    懒汉式是延迟加载的方式,只有在第一次使用时才创建实例。
class Singleton2 private constructor() {

    companion object {
        private var instance: Singleton2? = null

        @Synchronized
        fun getInstance(): Singleton2 {
            if (instance == null) {
                instance = Singleton2()

            }
            return instance!!
        }
    }

    fun printMessage() {
        println("===懒汉式")
    }
}

  1. 双重检查锁定
    双重检查锁定是一种更高效的懒汉式实现,通过双重检查锁定来确保线程安全。
class Singleton3 private constructor() {

    companion object {
        private var instance: Singleton3? = null;
        fun getInstance(): Singleton3 {
            if (instance == null) {
                synchronized(Singleton3::class.java) {
                    if (instance == null) {
                        instance = Singleton3()
                    }
                }
            }
            return instance!!
        }
    }

    fun printMessage() {
        println("===双重检查锁定")

    }
}

  1. 静态内部类
    静态内部类是实现单例模式的另一种方式,利用了Java的类加载机制来保证线程安全。
//静态内部类
class Singleton4 private constructor() {

    companion object {
        private var instance: Singleton4? = null
        fun getInstance(): Singleton4 {
            return Holder.instance
        }

        private object Holder {
            val instance = Singleton4()
        }
    }
    fun printMessage() {
        println("===静态内部类")
    }
}
  1. 枚举
    枚举是实现单例模式的最佳方法,它天生就是线程安全的,并且能够防止反序列化创建新的对象。
//枚举
enum class Singleton5 {

    INSTANCE;

    fun printMessage() {
        println("===枚举")
    }

}
fun main() {
    Singleton1.printMessage()
    Singleton2.getInstance().printMessage()
    Singleton3.getInstance().printMessage()
    Singleton4.getInstance().printMessage()
    Singleton5.INSTANCE.printMessage()
}
打印结果:
===饿汉式
===懒汉式
===双重检查锁定
===静态内部类
===枚举

以上就是在Kotlin中实现单例模式的几种常见方法。每种方法都有其优缺点,可以根据具体的需求选择合适的方法。

相关文章:

  • 了解什么是红黑树
  • 通过查询hive的元数据库中的表分区清单,拼写出来删除表分区的sql脚本
  • uniapp 中引入使用uView UI
  • PH热榜 | 2025-03-02
  • Sparsely-Gated Mixture-of-Experts Layer (MoE)论文解读与Pytorch代码实现
  • 大数据-236 离线数仓 - 会员活跃度 WDS 与 ADS 导出到 MySQL 与 广告业务 需求分析
  • 开启mysql的binlog日志
  • 【网络安全 | 渗透测试】GraphQL精讲一:基础知识
  • 高频 SQL 50 题(基础版)_1174. 即时食物配送 II
  • 随机播放音乐 伪随机
  • tin这个单词怎么记
  • 【沙漠之心:揭秘尘封奇迹的终极之旅】
  • 监督学习单模型—线性模型—LASSO回归、Ridge回归
  • 网站内容更新后百度排名下降怎么办?有效策略有哪些?
  • 【计算机网络入门】初学计算机网络(六)
  • anaconda 环境搭建流程
  • Minio搭建并在SpringBoot中使用完成用户头像的上传
  • RISC-V汇编学习(二)—— 汇编语法
  • 《OpenCV》—— dlib库
  • android 资源selector写法注意
  • wordpress 文章数据表/石家庄百度快速排名优化
  • 手机如何访问电脑做的asp网站/全网营销推广靠谱吗
  • 推广app网站/正规手游代理平台有哪些
  • 电商网站开发 知乎/网络培训平台有哪些
  • 做网站需要留什么/石家庄新闻
  • 宝安区网络公司/seo外包费用