建造者模式映射为现实就类似于组装电脑,首先要安装CPU,其实要安装显卡等等,建造者模式的作用就是隐藏组装的细节,只需要提供需要安装的类型就可以创建一个完整的对象。
class Phone {
class Builder {
var cpu: String = ""
private set
var screen: String = ""
private set
var memory: String = ""
private set
var mainboard: String = ""
private set
fun cpu(cpu: String): Builder {
this.cpu = cpu
return this
}
fun screen(screen: String): Builder {
this.screen = screen
return this
}
fun memory(memory: String): Builder {
this.memory = memory
return this
}
fun mainboard(mainboard: String): Builder {
this.mainboard = mainboard
return this
}
fun build(): Phone {
return Phone(this)
}
}
private val cpu: String
private val screen: String
private val memory: String
private val mainboard: String
constructor(builder: Builder) {
this.cpu = builder.cpu
this.memory = builder.memory
this.screen = builder.screen
this.mainboard = builder.mainboard
}
}
fun main() {
val phone = Phone.Builder()
.cpu("cpu")
.screen("screen")
.memory("memory")
.mainboard("mainboard")
.build()
}
优点
·建造者模式的封装性很好
·在建造者模式中,客户端不需要知道产品内部的组成细节,可以很好的解耦
·逻辑更加清晰
·很容易进行拓展
缺点
只能创建相近的产品,如果产品相差很大,则适用性不强