美文网首页
kotlin 中的单例模式

kotlin 中的单例模式

作者: Bfmall | 来源:发表于2022-11-25 19:06 被阅读0次
/**
 * DESC   : kt中的单例模式
 */
const val KtBaseSingleTonTest01_TAG = "KtBaseSingleTonTest01"

/**
 * Java中的懒汉式 (双重校验)
 *
 * public class SingleTon {
    private static SingleTon instance;

    private SingleTon(){}

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


/**
 * kotlin懒汉式单例模式
 */
class SingleTonKt1 {
    companion object {
        private var instance : SingleTonKt1? = null
            get() {
                if (field == null) {
                    field = SingleTonKt1()
                }
                return field
            }


        @Synchronized
//        fun getKtInstance1() = instance
        fun getKtInstance1() = instance!!
    }

    fun getInfo() {
        Log.d(KtBaseSingleTonTest01_TAG, "getInfo==>")
    }
}


/**
 * kotlin懒汉式单例模式双重校验安全,类似java的双重校验
 */
class SingleTonKt2 {
    companion object {
        val instance : SingleTonKt2 by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            SingleTonKt2()
        }
    }

    fun getInfo() {
        Log.d(KtBaseSingleTonTest01_TAG, "getInfo==>")
    }
}

class KtBaseSingleTonTest01 {

    fun testSingletonKt01() {
        Log.d(KtBaseSingleTonTest01_TAG, "testSingletonKt01==>")
        /**
         * 如果getKtInstance1方法直接返回instance,instance可能为空,在调用的时候需要加非空判断
         * fun getKtInstance1() = instance
         * 调用如下:
         * SingleTonKt1.getKtInstance1()?.getInfo()
         */
        SingleTonKt1.getKtInstance1()?.getInfo()

        /**
         * 如果getKtInstance1方法返回instance!!,断言不为空,则在调用的时候无需再加非空判断
         * fun getKtInstance1() = instance!!
         * 调用如下:
         * SingleTonKt1.getKtInstance1().getInfo()
         */
        SingleTonKt1.getKtInstance1().getInfo()
    }

    fun testSingletonKt02() {
        SingleTonKt2.instance.getInfo()
    }
}

相关文章

  • Kotlin 的单例模式

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

  • Kotlin单例模式使用案例

    Kotlin单例模式 1、kotlin的object就是一个单例模式,所有字段都是static静态,方法不是静态2...

  • Kotlin设计模式-单例模式

    单例模式是项目中最常见的工具类使用模式 kotlin中单例的最佳实践方式,线程安全的懒汉模式 java中调用 ko...

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

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

  • Kotlin 的单例模式

    Kotlin 的单例模式(5种) Kotlin 的5种单例模式: 饿汉式 懒汉式 线程安全的懒汉式 双重校验锁式 ...

  • Kotlin中的单例模式与Java对比

    目前java中的单例模式有多种写法,kotlin中的写法更多一点,本篇会总结全部的到单例模式写法。 一、懒人写法(...

  • kotlin精讲-第4章(5)kotlin Object关键字

    创建单例 Java中的单例 什么是单例?单例是一种设计模式,用来保证某一个类只有一个实例。在Kotlin中,Obj...

  • 单例模式

    单例模式 单例模式简介基本用法Kotlin 不带参Kotlin 带参饿汉式懒汉式双重校验锁静态内部类枚举集合管理问...

  • 使用Kotlin高效地开发Android App(五)完结篇

    一. 单例 使用 Java 来编写单例模式的话,可以写出好几种。同样,使用 Kotlin 也可以写出多种单例模式。...

  • 2020-09-30

    复合符号[Elvis 运算符] 单例模式 @JvmOverloads注解在Kotlin中@JvmOverloads...

网友评论

      本文标题:kotlin 中的单例模式

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