建造者模式
特点
可以逐步构建对象,不必一次性创建。
code
在 Go 中,Builder 模式是一种创建型设计模式,用于逐步构建复杂对象。以下是如何实现 Builder 模式的一个示例:
示例代码
package main
import "fmt"
// House 代表复杂对象
type House struct {
windows string
doors string
roof string
}
// HouseBuilder 是构建 House 的接口
type HouseBuilder interface {
setWindows()
setDoors()
setRoof()
getHouse() House
}
// ConcreteHouseBuilder 是具体的建造者
type ConcreteHouseBuilder struct {
house House
}
func (b *ConcreteHouseBuilder) setWindows() {
b.house.windows = "Wooden Windows"
}
func (b *ConcreteHouseBuilder) setDoors() {
b.house.doors = "Wooden Doors"
}
func (b *ConcreteHouseBuilder) setRoof() {
b.house.roof = "Concrete Roof"
}
func (b *ConcreteHouseBuilder) getHouse() House {
return b.house
}
// Director 用于管理构建过程
type Director struct {
builder HouseBuilder
}
func (d *Director) setBuilder(b HouseBuilder) {
d.builder = b
}
func (d *Director) constructHouse() {
d.builder.setWindows()
d.builder.setDoors()
d.builder.setRoof()
}
func main() {
builder := &ConcreteHouseBuilder{}
director := &Director{}
director.setBuilder(builder)
director.constructHouse()
house := builder.getHouse()
fmt.Printf("House: %+v\n", house)
}
关键点
- Builder 接口: 定义了构建对象的步骤。
- Concrete Builder: 实现了 Builder 接口,具体构建对象的每个部分。
- Director: 控制构建过程,指导 Builder 逐步构建对象。
- 产品对象: 最终构建的复杂对象。
优点
- 分步构建: 可以逐步构建对象,不必一次性创建。
- 灵活性: 可以轻松更改构建过程或产品的内部表示。
- 可读性: 清晰地定义了对象的构建步骤。
Builder 模式适用于需要构建复杂对象且构建过程独立于对象本身的场景。