kotlin 单例和代理

716 阅读1分钟

github地址

委托(代理)

(单例模式)懒汉式加载

  • Kotlin中的单例模式:Kotlin引入了一个叫做object的类型,用来很容易的实现单例模式,object类型的单例模式,本质上是饿汉式加载,即在类加载的时候创建单例。 它可能存在的问题有:

    
      1.如果构造方法中存在过多的处理,会导致加载这个类时比较慢,可能引起性能问题。
      2.如果使用饿汉式的话,只进行了类的装载,并没有实质的调用,会造成资源的浪费。

object SimpleSington {
  fun test() {}
}
//在Kotlin里调用
SimpleSington.test()

//在Java中调用
SimpleSington.INSTANCE.test();
  • 针对饿汉式的潜在问题,我们可以使用懒汉式来解决,即将实例初始化放在开始使用之前。Kotlin版的懒汉式加载代码如下:

class LazySingleton private constructor(){
    companion object {
        val instance: LazySingleton by lazy { LazySingleton() }
    }
}
//显式声明构造方法为private
//companion object用来在class内部声明一个对象
//LazySingleton的实例instance 通过lazy来实现懒汉式加载
//lazy默认情况下是线程安全的,这就可以避免多个线程同时访问生成多个实例的问题
  • lazy 的其他用法

private val defaultButton: Button by lazy { findViewById(R.id.default_number_picker_button) as Button }