首页 > 代码库 > (转载) Kotlin 设计模式-建造者
(转载) 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 设计模式-建造者
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。