概述
所谓委托模式 ,就是为其他对象提供一种代理以控制对这个对象的访问,在Java开发过程中,是继承模式之外的很好的解决问题的方案,不熟悉委托模式的,可以参考博委托模式。
对于Kotlin而言,其直接支持委托模式,从而避免为了实现模式而不得不写那些常规的代码。又不得不赞叹,Kotlin的优雅,简洁。
by
Kotlin中,委托的实现依靠于关键字 by ,by表示将抽象主题的实例(by后边的实例)保存在代理类实例的内部,比如SportsManager类继承于ISports接口,并可以ISports接口的所有的 public 方法委托给一个指定的对象。
interface ISports {
fun doSports()
}
class SwimForSports: ISports{
override fun doSports() {
println("do swim")
}
}
class SportsManager(sport: ISports): ISports by sport
fun main(args: Array<String>) {
val swimSports: SwimForSports = SwimForSports()
SportsManager(swimSports).doSports()// Log:do swim
}
在SportsManager声明中,by子句表示,将sport保存在SportsManager的对象实例内部,而且编译器将会生成继承自 ISports 接口的所有方法, 并将调用转发给sport。