(转载) Kotlin 设计模式-建造者
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(转载) Kotlin 设计模式-建造者相关的知识,希望对你有一定的参考价值。
前言
Ktolin的可以使用DSL方式来创建对象,那么对于设计模式来说,DSL方式创建对象就类似于Java 中使用Builder对象来创建,那么来一段代码看看DSL方式创建对象吧,当然Java也可以调用的哦!
Show me the Code
class UnionBankPay private constructor(val activity: Activity,
val tradeCode: String,
val serverModel: String){
//私有化构造方法
private constructor(builder: Builder) : this(builder.activity,
builder.tradeCode,
builder.serverModel)
//伴生对象,对外提供静态的build方法
companion object {
fun build(init: Builder.() -> Unit) = Builder(init).build()
}
//Builder 内部类
class Builder private constructor() {
constructor(init: Builder.() -> Unit) : this() {
init()
}
//属性
lateinit var activity: Activity
lateinit var tradeCode: String
lateinit var serverModel: String
//DSL赋值方法
fun activity(init: Builder.() -> Activity) = apply { activity = init() }
fun tradeCode(init: Builder.() -> String) = apply { tradeCode = init() }
fun serverModel(init: Builder.() -> String) = apply { serverModel = init() }
fun build() = UnionBankPay(this)
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
调用
UnionBankPay.build {
activity { this@MainActivity}
tradeCode { "123123" }
serverModel { "00" }
}
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
或者
UnionBankPay.build {
activity = this@MainActivity
tradeCode = "123123"
serverModel = "00"
}
以上是关于(转载) Kotlin 设计模式-建造者的主要内容,如果未能解决你的问题,请参考以下文章