Kotlin 中的 by lazy
今天讲下Kotlin中的 by lazy (不想看废话的 直接往下拉 直奔主题)
前言
再讲By lazy前 我们先说说 委托模式
**委托模式(delegation pattern)**是软件设计模式中的一项基本技巧。在委托模式
中,**有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。**委托模式是一项基本技巧,许多其他的模式,如状态模式
、策略模式
、访问者模式
本质上是在更特殊的场合采用了委托模式
。委托模式
使得我们可以用聚合来替代继承,它还使我们可以模拟mixin
。
还是有点模糊? 上例子
class People {
fun sayHello() {
println("Hello World")
}
}
class Student {
fun sayHello() {
People().sayHello()
}
}
fun main() {
Student().sayHello()
}
Hello World
这就是应该最简单的委托模式了 Main
调用Student
的sayHello
方法时 Student
拥有People
的实例 将SayHello
委托给People的SayHello
的方法去执行。
是不是觉得很简单 觉得自己又行了? 棒棒
正文开始
现在切到Kotlin中的委托 他分为两种 一种是属性委托
一种是类委托
-
类委托
下面代码的2个问题
- 在Kotlin中 by 是委托的关键字
lazy
并不是关键字而表达式 下面会讲到 - 认真的你 发现了为什么
Derived
不用实现print
方法
通过打印你发现 创建实例
BaseImpl
给他传入10
并且把这个实例传给了Derived
打印结果就对应上了没错 这就是委托 因为
BaseImpl
也实现了Base
那么Derived
就委托BaseImpl
执行对应的方法。实际和我们的第一段例子是一样的 只不过Kotlin的语法糖 让我们连方法都省略了 代码变得更简单了interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main() { val b = BaseImpl(10) Derived(b
- 在Kotlin中 by 是委托的关键字