| 使用场景 | 实现方式 |
|---|---|
| 使用 builder 创建者模式的场景一般为构造一个参数含有大量数据的场景 | 将 builder 模式内置到目标类中,目标类使用 private 修饰构造方法,对外暴露对应的 builder 通过链式调用 builder 的各种方法后,调用 build 生成对应的目标类 |
| 项目中实践 | 使用 spm 打点的时候借助 kotlin 语言的 DSL 特性实现了 builder 模式,在广告 sdk 中也使用该模式创建参数 |
| 类似结构 | 还有一个类似结构就是类的立案时调用,不使用 builder 直接在对应的方法返回 this 也可以达到链式调用的目的 |
package com.duwo.business.report
import com.xckj.log.model.SpmInfo
class SPMInfoBuilder private constructor() {
companion object {
inline fun build(block: SBuilder.() -> Unit): SpmInfo = SBuilder().apply(block).build()
}
class SBuilder {
private var spmB = ""
private var spmC = ""
private var spmD = ""
fun setSPMPageID(pageId: String): SBuilder {
spmB = pageId
return this
}
fun setSPMBlockID(blockId: String): SBuilder {
spmC = blockId
return this
}
fun setSPMElementID(elementId: String): SBuilder {
spmD = elementId
return this
}
fun build(): SpmInfo {
val spmInfo = SpmInfo()
spmInfo.b = this.spmB
spmInfo.c = this.spmC
spmInfo.d = this.spmD
return spmInfo
}
}
}
总结
builder 模式最多的就是创建一个含有大量参数的对象,使用 builder 模式可以方便快捷的创建出目标对象,同时也可以屏蔽创建细节。