类委托
使用场景: 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
interface Base {
fun print()
}
class BaseImpl(val x: Int): Base {
override fun print() {
println("BaseImpl:$x")
}
}
class BaseImpl2(val x: Int): Base {
override fun print() {
println("BaseImpl2:$x")
}
}
class Derived(val b: Base): Base by b
fun main() {
val base = BaseImpl(1)
val base2 = BaseImpl2(2)
Derived(base).print()
Derived(base2).print()
}
标准委托
val lazyValue: String by lazy {
print("hahaha")
"xixixi"
}
fun main() {
println(lazyValue)
println(lazyValue)
}
输出:
hahahaxixixi
xixixi
by lazy里面的方法只会执行一次就会赋值。第二次直接返回,不再进去执行方法。在某些时候可以代替单例的 getInstance.
其他委托模式…
|