更新生成者模式示例,添加木屋和砖房建造者实现,重构相关代码并增强可读性

This commit is contained in:
2025-12-09 21:55:32 +08:00
parent 29e554b670
commit cc736d524b
7 changed files with 394 additions and 21 deletions
+120
View File
@@ -0,0 +1,120 @@
package main
import "fmt"
/* 实例
汤宝宝想要建造一栋属于自己的房子,于是找来了著名的建筑设计
公司——生成者模式公司(Builder Pattern Inc.)帮忙设计和建造房子。
*/
// 产品:房子
type House struct {
Foundation string // 地基
Structure string // 结构
Roof string // 屋顶
}
// 建造者接口
type HouseBuilder interface {
buildFoundation()
buildStructure()
buildRoof()
getHouse() House
}
// 具体建造者:木屋建造者
type WoodenHouseBuilder struct {
house House
}
func (b *WoodenHouseBuilder) buildFoundation() {
b.house.Foundation = "木桩地基"
fmt.Println(" 建造木桩地基")
}
func (b *WoodenHouseBuilder) buildStructure() {
b.house.Structure = "木结构"
fmt.Println(" 建造木结构")
}
func (b *WoodenHouseBuilder) buildRoof() {
b.house.Roof = "木屋顶"
fmt.Println(" 建造木屋顶")
}
func (b *WoodenHouseBuilder) getHouse() House {
return b.house
}
// 具体建造者:砖房建造者
type BrickHouseBuilder struct {
house House
}
func (b *BrickHouseBuilder) buildFoundation() {
b.house.Foundation = "混凝土地基"
fmt.Println(" 建造混凝土地基")
}
func (b *BrickHouseBuilder) buildStructure() {
b.house.Structure = "砖结构"
fmt.Println(" 建造砖结构")
}
func (b *BrickHouseBuilder) buildRoof() {
b.house.Roof = "瓦屋顶"
fmt.Println(" 建造瓦屋顶")
}
func (b *BrickHouseBuilder) getHouse() House {
return b.house
}
// 指挥者
type Director struct {
builder HouseBuilder
house House
}
// 重置房子
func (d *Director) reset() {
d.house = House{}
}
func (d *Director) setBuilder(b HouseBuilder) {
d.builder = b
}
func (d *Director) constructHouse() {
d.reset()
d.builder.buildFoundation()
d.builder.buildStructure()
d.builder.buildRoof()
d.house = d.builder.getHouse()
}
func main() {
var builder HouseBuilder
var director Director
var house House
fmt.Println("========= 生成者模式 =========")
// 使用木屋建造者
builder = &WoodenHouseBuilder{}
director.setBuilder(builder)
fmt.Println("建造木屋:")
director.constructHouse()
house = director.house
fmt.Printf("木屋建造完成:%s %s %s\n\n", house.Foundation, house.Structure, house.Roof)
// 使用砖房建造者
builder = &BrickHouseBuilder{}
director.setBuilder(builder)
fmt.Println("建造砖房:")
director.constructHouse()
house = director.house
fmt.Printf("砖房建造完成:%s %s %s\n\n", house.Foundation, house.Structure, house.Roof)
fmt.Println("======= 生成者模式结束 =======")
}