kotlin的类的委托是通过
operator与by
关键进行处理,委托作为一种传统的设计模式,在Java中要想实现这种设计模式,就需要自己进行类的结构设计来实现。而在Kotlin中,提供语言层面上的支持,我们可以通过by关键字很轻松就能实现
案例1
- 爷爷奶奶给了100块孙子,而且他孙子委托媳妇洗碗(儿子委托妈妈洗碗,儿子的压岁钱减半)
package com.kotlin.flong.oop_fp
import kotlin.reflect.KProperty
//类的委托
fun main(args: Array<String>) {
var myson = MySon()
//爷爷奶奶给了100块
myson.money =100
//取压岁钱
println(myson.money)
}
class MySon {
//压岁钱
var money: Int by Mother()
}
class Mother {
//儿子的压岁钱
var mySonMoney = 0
//自己的钱包,妈妈的钱包
var myWallt = 0
operator fun getValue(myson: MySon, p: KProperty<*>): Int {
return mySonMoney;
}
operator fun setValue(myson: MySon, p: KProperty<*>, i: Int) {
mySonMoney = 50
myWallt += i - 50
}
}
案例2
- 儿子的爸爸委托儿子洗碗
//类的委托
fun main(args: Array<String>) {
val son = SonFather()
son.wash()
}
interface WashPower{
//洗碗的行为
fun wash()
}
class Son1 :WashPower{
override fun wash() {
println("儿子开始洗碗")
}
}
//儿子的爸爸委托儿子洗碗
class SonFather :WashPower by Son1(){
}
案例三
只有有洗碗的能力都委托给他
//类的委托
fun main(args: Array<String>) {
val son = SonFather1(BigSon())
son.wash()
}
interface WashPower1{
//洗碗的行为
fun wash()
}
class BigSon :WashPower1{
override fun wash() {
println("儿子开始洗碗")
}
}
// 只有有洗碗的能力都委托给他
class SonFather1(var wash:WashPower1) :WashPower1 by wash{
override fun wash() {
println("给儿子一块钱")
wash.wash()
println("继续")
}
}
网友评论