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 }