美文网首页
单例模式Kotlin篇

单例模式Kotlin篇

作者: maoai_xianyu | 来源:发表于2020-08-14 17:01 被阅读0次
  • 单例模式Java篇

  • 单例模式 - 饿汉式

    /**
     *
     * @Description 饿汉式-定义一个object对象表达式即可,无需手动去设置构造器私有化和提供全局访问点
     */
    object SingleTon1
    
  • 单例模式-懒汉式

    1. 无参数
    /**
     * @Description 懒汉式 - 无参数传入
     */
    class Singleton2 private constructor() {
    
        companion object {
            private var INSTANCE: Singleton2? = null
                get() {
                    return field ?: Singleton2()
                }
    
            fun getInstance(): Singleton2 {
                return INSTANCE!!
            }
        }
    }
    
    1. 有参数
    /**
     * @Description 懒汉式 - 有参数出阿努如
     */
    class Singleton2Params private constructor(val context: Context) {
    
        companion object {
            private var INSTANCE: Singleton2Params? = null
    
            fun getInstance(context: Context): Singleton2Params {
                return INSTANCE ?: Singleton2Params(context)
            }
        }
    
    }
    
    1. 懒汉式安全
    /**
     * @Description 懒汉式安全,方法同步用 @Synchronized
     */
    class Singleton3 private constructor() {
    
        companion object {
            private var INSTANCE: Singleton3? = null
                get() {
                    return field ?: Singleton3()
                }
    
            @JvmStatic  // @JvmStatic 在Java中可以直接调用
            @Synchronized
            fun getInstance(): Singleton3 {
                return INSTANCE!!
            }
        }
    }
    
  • 单例模式-双重锁DCL

    1. 基本
    /**
     * @Description DCL
     */
    class Singleton4 private constructor() {
        companion object {
            @Volatile
            private var INSTANCE: Singleton4? = null
            fun getInstance(): Singleton4 {
                if (INSTANCE == null) {
                    synchronized(this) {
                        if (INSTANCE == null) {
                            INSTANCE = Singleton4()
                        }
                    }
                }
                return INSTANCE!!
            }
        }
     
    }
    
    1. by lazy 写法
    /**
     * @Description DCL
     */
    class Singleton4DCL private constructor() {
    
        companion object {
            val INSTANCE: Singleton4DCL by
            lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
                Singleton4DCL()
            }
        }
    }
    
    1. 和 1 一样,换一种写法
    /**
     * @Description DCL
     */
    class Singleton4DCLNew private constructor() {
    
        companion object {
            @Volatile
            private var INSTANCE: Singleton4DCLNew? = null
    
            fun getInstance(): Singleton4DCLNew = INSTANCE ?: synchronized(this) {
                INSTANCE ?: Singleton4DCLNew()
                //instanceTon ?: Singleton4DCLNew().also { instanceTon = it }
                //instanceTon ?: Singleton4DCLNew().let {  it }
                //instanceTon ?: Singleton4DCLNew().run { this }
                //instanceTon ?: Singleton4DCLNew().apply { instanceTon = this }
            }
        }
    }
    
    1. DCL传入参数
    class SingleInstance private constructor(private val mContext: Context) {
    
        companion object {
            @Volatile
            private var INSTANCE: SingleInstance? = null
    
            fun getInstance(context: Context): SingleInstance =
                INSTANCE ?: synchronized(this) {
                    INSTANCE ?: SingleInstance(context)
                }
        }
    
        fun doSomeThing() {
            val string = mContext.resources.getString(R.string.app_name)
            Log.d("singleDcl", string)
        }
    
    }
    
  • 单例模式-枚举

/**
 * @Description  枚举单例模式
 */
enum class SingleTonEnum {
    INSTANCE;

    fun doSomething() {
        println("do some thing")
    }
}
  • 单例模式-静态内部类
/**
 * @Description 静态内部类式
 */
class Singleton5 private constructor() {

    companion object {
        val INSTANCE: Singleton5 = Inner.INSTANCE
    }
    private object Inner {
        val INSTANCE: Singleton5 = Singleton5()
    }
}

相关文章

  • Kotlin 的单例模式

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

  • Kotlin单例模式使用案例

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

  • Kotlin 的单例模式

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

  • 单例模式Kotlin篇

    单例模式Java篇 单例模式 - 饿汉式/** * * @Description 饿汉式-定义一个object对象...

  • 单例模式

    单例模式 单例模式简介基本用法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篇

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