48.类委托

1.第一种方式代码如下

fun main(args: Array) {
    val smallHeadFeather = SmallHeadFeather()
    smallHeadFeather.wash()
}

//洗完能力
interface Washpower {
    //洗碗
    fun wash()
}

//大头儿子
class BigHeadSon : Washpower {
    override fun wash() {
        println("大头儿子开始洗碗了")
    }
}

//小头爸爸,将洗碗能力委托给大头儿子
class SmallHeadFeather : Washpower by  BigHeadSon()
  • 类委托通过关键字by来实现

2.类委托第二种实现方式

fun main(args: Array) {

    val bigHeadSon =BigHeadSon()

    val smallHeadFeather = SmallHeadFeather(bigHeadSon)
    smallHeadFeather.wash()
}

//洗完能力
interface Washpower {
    //洗碗
    fun wash()
}

//大头儿子
class BigHeadSon : Washpower {
    override fun wash() {
        println("大头儿子开始洗碗了")
    }
}

//小头爸爸,将洗碗能力委托给大头儿子
class SmallHeadFeather(val washpower: Washpower) : Washpower by washpower
  • 相比较之下:第二种方式扩展性更强

3.类委托加强,在调用方法前后加上一些操作,例如下面代码


fun main(args: Array) {

    val bigHeadSon = BigHeadSon()

    val smallHeadFeather = SmallHeadFeather(bigHeadSon)
    smallHeadFeather.wash()
}

//洗完能力
interface Washpower {
    //洗碗
    fun wash()
}

//大头儿子
class BigHeadSon : Washpower {
    override fun wash() {
        println("大头儿子开始洗碗了")
    }
}

//小头爸爸,将洗碗能力委托给大头儿子
class SmallHeadFeather(val washpower: Washpower) : Washpower by washpower {
    override fun wash() {
        println("付给小头儿子一块钱")
        //小头儿子洗碗功能
        washpower.wash()
        println("干得很好,下次继续")
    }
}
  • 输出结果如下:


    image.png

你可能感兴趣的:(48.类委托)