kotlin 委托

27 阅读1分钟

Kotlin 的委托(Delegation)  是一种设计模式的语言级实现,核心思想是将一个类的部分功能委托给另一个类来完成,避免继承的耦合性,同时复用代码。Kotlin 提供了 by 关键字,让委托的实现变得简洁且优雅。 委托分为两种核心类型:

  1. 类委托(Class Delegation) :实现接口时,将接口的方法委托给另一个对象。
  2. 属性委托(Property Delegation) :将属性的 get/set 逻辑委托给另一个对象。

一、类委托



//定义委托接口
interface Printer{
    fun print()
    fun change()
}

//定义一个非委托类,用于实现和委托类的对比,非委托类必须实现接口中的所有方法
class myPrinter:Printer{
    override fun print() {
        println("开始打印")
    }
    override fun change() {
        println("开始换墨盒")
    }
}
//委托类的实现:必须有一个委托参数,类型为委托的接口类型,然后使用by关键字将接口委托给参数。
//委托类中可以不用实现所有方法,只对需要的方法进行修改即可,这样可以节约资源,提升效率
class hisPrinter(you:Printer):Printer by you{
    override fun print() {
        println("这是委托打印")
    }
}

//main方法中实现委托的输出
fun main() {
    var p = myPrinter()
    hisPrinter(p).print()
}

二、属性委托

val lazyValue: String by lazy {
    println("第一次访问时初始化")
    "Hello Lazy"
}

fun main() {
    println(lazyValue) // 第一次访问:初始化 + 输出值
    println(lazyValue) // 直接输出值,不再初始化
}