前言
因为kotlin的语法特性,观察者模式写起来好说挺方便的,对应java来说
什么是观察者模式
顾名思义,就是我的属性发现变化时,观察者知道我发生变化了(通知更新)
如Android最常见的listener
button.setOnClickListener {
xxxxxxxx
}
这儿涉及到了Kotlin的高阶函数了:
Android Kotlin 高阶函数浅谈
其实这而本质上是kotlin帮我们做了语法优化,本质上还是接口的回调
正文
kotlin上比较方便的写法就是在属性变换的地方通过高阶函数进行回调
class Student {
var age = 0
set(value) {
field = value
onChangeAction?.invoke(this)
}
var name = ""
set(value) {
field = value
onChangeAction?.invoke(this)
}
private var onChangeAction: ((Student) -> Unit)? = null
fun setOnChangeAction(action: (student: Student) -> Unit): Student {
this.onChangeAction = action
return this
}
}
// 使用
@Test
fun test(){
val student = Student()
student.setOnChangeAction {
println("------changing--------")
println("change student name : ${student.name}")
println("change student age : ${student.age}")
println("-----------------")
}
println("before student name : ${student.name}")
println("before student age : ${student.age}")
student.name = "xiao"
student.age = 12
}
然后Kotlin里面还有个委托,委托可以使用观察者模式,就是说我们还可以这样子写
class Student {
var age = 0
set(value) {
field = value
onChangeAction?.invoke(this)
}
var name: String by Delegates.observable(""){
_, oldValue, newValue ->
println("change name $oldValue")
println("change name $newValue")
}
private var onChangeAction: ((Student) -> Unit)? = null
fun setOnChangeAction(action: (student: Student) -> Unit): Student {
this.onChangeAction = action
return this
}
}
总结
高阶函数真香
网友评论