美文网首页
Kotlin单例模式

Kotlin单例模式

作者: biloba | 来源:发表于2018-02-05 12:54 被阅读54次

1. 饿汉式
直接使用对象表达式object就可以方便的实现

object Singleton {
    ...
}

//调用时
Singleton.xxx

这种方式实际上是使用Java静态代码块在类加载时初始化类中INSTANCE静态对象实例

public final class Singleton {
    public static final Singleton INSTANCE = null;
    static {
        Singleton singleton = new Singleton();
    }
    private Singleton() {
        INSTANCE = this;
    }
}

所以在Java下调用时

Singleton.INSTANCE.xxx

2. 懒汉式

  • 构造时不传参数
    如果在对象构造时不需要传参数,那使用Kotlin标准库提供的延迟属性 Lazy可以很方便实现
class Singleton private constructor(){

    object Holder{
        val INSTANCE=Singleton()
    }

    companion object {
        val instance by lazy { 
            Holder.INSTANCE
        }
    }

    xxx
}


// Kotlin 中调用
Singleton.instance.xx()
// Java 中调用
Singleton.Companion.getInstance().xx()

延迟属性 Lazy 默认线程安全模式是 LazyThreadSafetyMode.SYNCHRONIZED,使用双重检验锁来保证线程安全

  • 构造时传参数
    上面两种方式都很方便,但都不能在获取单例时传入参数,如果想要传参数,可以在伴随对象中写方法自己保证线程安全,这里采用双重检验锁实现
class Singleton private constructor(arg: String){

    companion object {
        @Volatile private var instance: Singleton? = null
        
        public fun getInstance(arg: String): Singleton{
            if (instance == null) {
                synchronized(Singleton::class){
                    if (instance == null) {
                        instance=Singleton(arg)
                    }
                }
            }
            return instance!!
        }
    }
}

@Volatile为了防止指令重拍造成的影响

相关文章

  • Kotlin 的单例模式

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

  • Kotlin单例模式使用案例

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

  • Kotlin 的单例模式

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

  • 单例模式

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

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

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

  • kotlin之单例模式

    1. Kotlin天生支持单例模式,只要使用object就可以实现一个单例模式: object ComputerF...

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

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

  • Android Kotlin 设计模式之单例模式

    Android Kotlin 单例模式 前言 最近学习Kotlin,所以也在对比Kotlin和java的差异,在j...

  • Kotlin和Java 单例模式

    Java 和Kotlin的单例模式其实很像,只是Kotlin一部分单例可以用对象类和委托lazy来实现 Java ...

  • Kotlin——单例模式

    最近在写项目的同时也用到了单例模式,kotlin的单例还不是很会写,现在就总结下java写法对应的kotlin是如...

网友评论

      本文标题:Kotlin单例模式

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