对比Java学Kotlin单例模式

Posted 陈蒙_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对比Java学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.INSTANCE.method()

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

用法:

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
            
        
    

参考文档

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

单例模式之Java和Kotlin版

对比Java学Kotlin作用域函数

对比Java学Kotlin作用域函数

对比Java学Kotlin作用域函数

对比Java学Kotlin官方文档目录

Kotlin下的5种单例模式