Kotlin 5种单例模式

[复制链接]
发表于 2025-10-20 20:47:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  • 饿汉式
    饿汉式是最简朴的一种实现方式,在类加载时就完成了实例的初始化。
  1. //饿汉式
  2. object Singleton1 {
  3.     fun printMessage() {
  4.         println("===饿汉式")
  5.     }
  6. }
复制代码

  • 懒汉式
    懒汉式是延长加载的方式,只有在第一次利用时才创建实例。
  1. class Singleton2 private constructor() {
  2.     companion object {
  3.         private var instance: Singleton2? = null
  4.         @Synchronized
  5.         fun getInstance(): Singleton2 {
  6.             if (instance == null) {
  7.                 instance = Singleton2()
  8.             }
  9.             return instance!!
  10.         }
  11.     }
  12.     fun printMessage() {
  13.         println("===懒汉式")
  14.     }
  15. }
复制代码

  • 双重查抄锁定
    双重查抄锁定是一种更高效的懒汉式实现,通过双重查抄锁定来确保线程安全
  1. class Singleton3 private constructor() {
  2.     companion object {
  3.         private var instance: Singleton3? = null;
  4.         fun getInstance(): Singleton3 {
  5.             if (instance == null) {
  6.                 synchronized(Singleton3::class.java) {
  7.                     if (instance == null) {
  8.                         instance = Singleton3()
  9.                     }
  10.                 }
  11.             }
  12.             return instance!!
  13.         }
  14.     }
  15.     fun printMessage() {
  16.         println("===双重检查锁定")
  17.     }
  18. }
复制代码

  • 静态内部类
    静态内部类是实现单例模式的另一种方式,利用了Java的类加载机制来包管线程安全
  1. //静态内部类
  2. class Singleton4 private constructor() {
  3.     companion object {
  4.         private var instance: Singleton4? = null
  5.         fun getInstance(): Singleton4 {
  6.             return Holder.instance
  7.         }
  8.         private object Holder {
  9.             val instance = Singleton4()
  10.         }
  11.     }
  12.     fun printMessage() {
  13.         println("===静态内部类")
  14.     }
  15. }
复制代码

  • 罗列
    罗列是实现单例模式的最佳方法,它天生就是线程安全的,而且可以大概防止反序列化创建新的对象。
  1. //枚举
  2. enum class Singleton5 {
  3.     INSTANCE;
  4.     fun printMessage() {
  5.         println("===枚举")
  6.     }
  7. }
复制代码
  1. fun main() {
  2.     Singleton1.printMessage()
  3.     Singleton2.getInstance().printMessage()
  4.     Singleton3.getInstance().printMessage()
  5.     Singleton4.getInstance().printMessage()
  6.     Singleton5.INSTANCE.printMessage()
  7. }
  8. 打印结果:
  9. ===饿汉式
  10. ===懒汉式
  11. ===双重检查锁定
  12. ===静态内部类
  13. ===枚举
复制代码
以上就是在Kotlin中实现单例模式的几种常见方法。每种方法都有其优缺点,可以根据详细的需求选择符合的方法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表