Kotlin 5种单例模式

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

  1. 饿汉式
    饿汉式是最简单的一种实现方式,在类加载时就完成了实例的初始化。

    //饿汉式
    object Singleton1 {
    fun printMessage() {
    println("===饿汉式")
    }
    }

  2. 懒汉式
    懒汉式是延迟加载的方式,只有在第一次使用时才创建实例。

    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("===懒汉式")
     }

    }

  3. 双重检查锁定
    双重检查锁定是一种更高效的懒汉式实现,通过双重检查锁定来确保线程安全。

    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("===双重检查锁定")
    
     }

    }

  4. 静态内部类
    静态内部类是实现单例模式的另一种方式,利用了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("===静态内部类")
     }

    }

  5. 枚举
    枚举是实现单例模式的最佳方法,它天生就是线程安全的,并且能够防止反序列化创建新的对象。

    //枚举
    enum class Singleton5 {

    复制代码
     INSTANCE;
    
     fun printMessage() {
         println("===枚举")
     }

    }

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

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

相关推荐
摸鱼的春哥43 分钟前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
明月_清风2 小时前
自定义右键菜单:在项目里实现“选中文字即刻生成新提示”
前端·javascript
明月_清风2 小时前
告别后端转换:高质量批量导出实战
前端·javascript
刘发财6 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
ssshooter13 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
Live0000014 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉14 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化
球球pick小樱花15 小时前
游戏官网前端工具库:海内外案例解析
前端·javascript·css
喝水的长颈鹿15 小时前
【大白话前端 02】网页从解析到绘制的全流程
前端·javascript
用户145369814587815 小时前
VersionCheck.js - 让前端版本更新变得简单优雅
前端·javascript