美文网首页
给人看的Kotlin设计模式——单例模式

给人看的Kotlin设计模式——单例模式

作者: 珞泽珈群 | 来源:发表于2020-06-14 20:58 被阅读0次

单例设计模式就不用多介绍了,说是大家最熟悉的设计模式也不为过,在Effective Java中有两条与之相关:第3条用私有构造器或者枚举类型强化 Singleton 属性,第4条通过私有构造器强化不可实例化的能力。单例模式的关键在于保证多线程下仍然是单例,常见的做法有:

  1. 静态变量存储单例(饿汉模式)
  2. Double-checked locking
  3. 静态类Holder
  4. 枚举类

众所周知,Kotlin使用object关键字来实现单例,这种实现方式实际上是方式1饿汉模式,并且仅适用于只有默认构造函数的类,如果构造函数包含有参数,是不能使用object关键字的,此时还得使用方式2:

class PlantRepository private constructor(private val plantDao: PlantDao) {

    fun getPlants() = plantDao.getPlants()

    companion object {

        @Volatile private var instance: PlantRepository? = null

        fun getInstance(plantDao: PlantDao) =
                instance ?: synchronized(this) {
                    instance ?: PlantRepository(plantDao).also { instance = it }
                }
    }
}

这就是Kotlin味道的Double-checked locking,本质上跟Java的写法是一样的,只是利用了?:操作符以及also扩展函数之后变得更加简洁。至于为什么需要在instance上加上注解@Volatile(即Java的关键字volatile),可以查看维基百科Double-checked locking

相关文章

  • 给人看的Kotlin设计模式——单例模式

    单例设计模式就不用多介绍了,说是大家最熟悉的设计模式也不为过,在Effective Java中有两条与之相关:第3...

  • Kotlin 的单例模式

    Kotlin 的单例模式 1. 在 Java 中的单例模式 懒汉式单例模式,并且是线程安全 2. 在 Kotlin...

  • Kotlin学习笔记---单例模式(一)

    前言 关于单例模式,Java中最常见的设计模式,关于懒汉式还是饿汉式,各有优势,而Kotlin中也少不了单例模式,...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

网友评论

      本文标题:给人看的Kotlin设计模式——单例模式

      本文链接:https://www.haomeiwen.com/subject/axvfxktx.html