Kotlin學習之-5.12 代理模式

Kotlin學習之-5.12 代理模式

類代理

代理模式已經被證明是一種很好的替代實現繼承的方式,並且Kotlin原生支持代理模式還不需要任何多餘代碼。一個類Derived可以從一個接口Base繼承並且代理所有他的共有方法到一個特定的對象上。

interface Base {
    fun print()
}

class BaseImpl(val x: Int) : Base {
    override fun print() { print(x) }
}

class Derived(b: Base) : Base by b

fun main(args: Array<String>) {
    val b = BaseImpl(10)
    Derived(b).print() // 輸出10
}

Derived類的父類列表中的by語句表明b會被存儲在Derived對象的內部,然後編譯器會參照所有Base的方法在b中生成一次。

注意,複寫方法會和你預期的一致。編譯器會使用你複寫override的實現而不是在代理對象中的實現。如果我們添加override fun print() { print("abc") }Derived類中,那麼程序將會輸出”abc” 而不是”10”。


PS,我會堅持把這個系列寫完,有問題可以留言交流,也關注專欄Kotlin for Android Kotlin安卓開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章