Kotlin設計模式-Builder模式

kotlin中Builder模式在一些復雜實體類構建,或者封裝的統一多樣化控件中使用方便。

示例一:實體對象的構建

/**
 * 類型安全的構造器
 */
class Car(
    val model: String? ,
    val year: Int
){
    companion object {
        /**
         * 帶接收者的函數類型,這意味著我們需要向函數傳遞一個Builder類型的實例
         */
        inline fun build(block: Builder.() -> Unit) = Builder().apply(block).build()
    }

    class Builder{
        var model: String? = null
        var year: Int = -1

        fun build() = Car(model ,year)
    }
}

使用

val  car = Car.build {
            model = "名字"
            year = 2017
        }

示例二:通用多樣化控件的構建

class Dialog private constructor(
    val title: String,
    val text: String?,
    val onAccept: (() -> Unit)?
) {
    class Builder(val title: String) {
        var text: String? = null
        var onAccept: (() -> Unit)? = null
        fun setText(text: String?): Builder {
            this.text = text
            return this
        }
        fun setOnAccept(onAccept: (() -> Unit)?): Builder {
            this.onAccept = onAccept
            return this
        }
        fun build() = Dialog(title, text, onAccept)
    }
}

使用

val dialog1 =Dialog.Builder("Some title")
    .setText("Great dialog")
    .setOnAccept { Log.i("tag" ,"I was clicked") }
    .build()
val dialog2 = Dialog.Builder("Another dialog")
    .setText("I have no buttons")
    .build()
val dialog3 = Dialog.Builder("Dialog with just a title").build()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。