一、建造者
package com.study.builder_pattern
abstract class AbstractComputerBuilder {
abstract fun buildMonitor(monitor:String)
abstract fun buildMouse(mouse:String)
abstract fun buildHost(host:String)
abstract fun buildCPU(cpu:String)
abstract fun makeComputer():Computer
}
package com.study.builder_pattern
class ComputerActualBuilder:AbstractComputerBuilder() {
private val computer=Computer()
override fun buildMonitor(monitor: String) {
computer.monitor=monitor
}
override fun buildMouse(mouse: String) {
computer.mouse=mouse
}
override fun buildHost(host: String) {
computer.host=host
}
override fun buildCPU(cpu: String) {
computer.cpu=cpu
}
override fun makeComputer(): Computer =computer
}
package com.study.builder_pattern
class ComputerStore(private val computerBuilder: AbstractComputerBuilder) {
fun makeComputer( monitor:String="", mouse:String="", host:String="", cpu:String="") = computerBuilder.run {
buildMonitor(monitor)
buildMouse(mouse)
buildHost(host)
buildCPU(cpu)
makeComputer()
}
}
二、产品类
package com.study.builder_pattern
data class Computer(var monitor:String="",var mouse:String="",
var host:String="",var cpu:String="")
三、主程序调用
package com.study.builder_pattern
fun main() {
val computerStore=ComputerStore(ComputerActualBuilder())
computerStore.makeComputer()
val computer = with(ComputerStore(ComputerActualBuilder())) {
makeComputer("华为显示器", "华为鼠标", "华为主机", "华为cpu")
}
print(computer)
}
四、运行结果