Kotlin 实现单例模式

Posted 陈蒙_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 实现单例模式相关的知识,希望对你有一定的参考价值。

Java 实现

先来回忆一下 Java 代码实现单例的一种方式:

public class Singleton {

    private static Singleton instance = null;

    private Singleton() {
        
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

更多单例模式见 单例模式

Kotlin 实现

那 Kotlin 的单例模式如何实现呢?是不是也有好几种方式呢?
下面就是见证奇迹的时刻:

object Singleton

是的,你没有看错,就这一行代码。

下面是带入参的实现方式:

用法:

Singleton.getInstance(context).doSomething()

Singleton 和 SingletonHolder 的实现:

class Singleton private constructor(context: Context) {
    init {
        // do something with context
    }

    companion object : SingletonHolder<Singleton, Context>(::Singleton)
}

open class SingletonHolder<out T: Any, in A>(creator: (A) -> T) {
    private var creator: ((A) -> T)? = creator
    @Volatile private var instance: T? = null

    fun getInstance(arg: A): T {
        val checkInstance = instance
        if (checkInstance != null) {
            return checkInstance
        }

        return synchronized(this) {
            val checkInstanceAgain = instance
            if (checkInstanceAgain != null) {
                checkInstanceAgain
            } else {
                val created = creator!!(arg)
                instance = created
                creator = null
                created
            }
        }
    }
}

参考文档

以上是关于Kotlin 实现单例模式的主要内容,如果未能解决你的问题,请参考以下文章

对比Java学Kotlin单例模式

Kotlin下的5种单例模式

Kotlin的5种单例模式

Kotlin下的5种单例模式

Kotlin的5种单例模式

kotlin用object实现单例模式,companion object与java静态