美文网首页
Android Kotlin 设计模式之观察者模式

Android Kotlin 设计模式之观察者模式

作者: 水天滑稽天照八野滑稽石 | 来源:发表于2020-01-14 11:58 被阅读0次

    前言

    因为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
        }
    }
    

    总结

    高阶函数真香

    相关文章

      网友评论

          本文标题:Android Kotlin 设计模式之观察者模式

          本文链接:https://www.haomeiwen.com/subject/zmgoactx.html