Skip to main content

建造者模式

特点

可以逐步构建对象,不必一次性创建。

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)
}

关键点

  1. Builder 接口: 定义了构建对象的步骤。
  2. Concrete Builder: 实现了 Builder 接口,具体构建对象的每个部分。
  3. Director: 控制构建过程,指导 Builder 逐步构建对象。
  4. 产品对象: 最终构建的复杂对象。

优点

  • 分步构建: 可以逐步构建对象,不必一次性创建。
  • 灵活性: 可以轻松更改构建过程或产品的内部表示。
  • 可读性: 清晰地定义了对象的构建步骤。

Builder 模式适用于需要构建复杂对象且构建过程独立于对象本身的场景。