go: Builder Pattern
项目结构:

jewelry-builder/
├── go.mod // Go 模块文件
├── main.go // 客户端:入口调用
├── product/ // 产品层:成品珠宝
│ └── jewelry.go
├── builder/ // 建造者层:抽象+具体建造者
│ ├── builder.go // 抽象建造者接口
│ ├── ring_builder.go // 钻戒建造者
│ └── necklace_builder.go // 项链建造者
└── director/ // 指挥者层:控制制作流程
└── director.go
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述: Builder Pattern
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 6:19
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : jewelry.go
*/
package product
import "fmt"
// Jewelry 成品珠宝(复杂产品对象)
type Jewelry struct {
Name string // 珠宝名称
Material string // 材质
Gem string // 宝石
InlayCraft string // 镶嵌工艺
Engraving string // 刻字
QualityOK bool // 质检
}
// ShowInfo 展示成品信息
func (j *Jewelry) ShowInfo() {
fmt.Printf("🎁 成品珠宝:%s\n", j.Name)
fmt.Printf("├─ 材质:%s\n", j.Material)
fmt.Printf("├─ 宝石:%s\n", j.Gem)
fmt.Printf("├─ 镶嵌工艺:%s\n", j.InlayCraft)
fmt.Printf("├─ 刻字:%s\n", j.Engraving)
fmt.Printf("└─ 质检:%s\n", map[bool]string{true: "合格", false: "不合格"}[j.QualityOK])
fmt.Println("----------------------------------------")
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Builder Pattern
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 6:19
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : builder.go
*/
package builder
import "godesginpattern/Builder/product"
// JewelryBuilder 抽象建造者:定义固定制作步骤
type JewelryBuilder interface {
SetName() JewelryBuilder
SelectMaterial() JewelryBuilder
SelectGem() JewelryBuilder
ChooseInlay() JewelryBuilder
DoEngraving() JewelryBuilder
CheckQuality() JewelryBuilder
Build() *product.Jewelry
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Builder Pattern
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 6:19
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : ring_builder.go
*/
package builder
import "godesginpattern/Builder/product"
// DiamondRingBuilder 具体建造者:定制钻戒
type DiamondRingBuilder struct {
jewelry *product.Jewelry
}
func NewDiamondRingBuilder() *DiamondRingBuilder {
return &DiamondRingBuilder{jewelry: &product.Jewelry{}}
}
func (b *DiamondRingBuilder) SetName() JewelryBuilder {
b.jewelry.Name = "钻戒"
return b
}
func (b *DiamondRingBuilder) SelectMaterial() JewelryBuilder {
b.jewelry.Material = "铂金"
return b
}
func (b *DiamondRingBuilder) SelectGem() JewelryBuilder {
b.jewelry.Gem = "钻石"
return b
}
func (b *DiamondRingBuilder) ChooseInlay() JewelryBuilder {
b.jewelry.InlayCraft = "爪镶"
return b
}
func (b *DiamondRingBuilder) DoEngraving() JewelryBuilder {
b.jewelry.Engraving = "Forever Love"
return b
}
func (b *DiamondRingBuilder) CheckQuality() JewelryBuilder {
b.jewelry.QualityOK = true
return b
}
func (b *DiamondRingBuilder) Build() *product.Jewelry {
return b.jewelry
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Builder Pattern
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 6:19
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : necklace_builder.go
*/
package builder
import "godesginpattern/Builder/product"
// RubyNecklaceBuilder 具体建造者:定制红宝石项链
type RubyNecklaceBuilder struct {
jewelry *product.Jewelry
}
func NewRubyNecklaceBuilder() *RubyNecklaceBuilder {
return &RubyNecklaceBuilder{jewelry: &product.Jewelry{}}
}
func (b *RubyNecklaceBuilder) SetName() JewelryBuilder {
b.jewelry.Name = "红宝石项链"
return b
}
func (b *RubyNecklaceBuilder) SelectMaterial() JewelryBuilder {
b.jewelry.Material = "黄金"
return b
}
func (b *RubyNecklaceBuilder) SelectGem() JewelryBuilder {
b.jewelry.Gem = "红宝石"
return b
}
func (b *RubyNecklaceBuilder) ChooseInlay() JewelryBuilder {
b.jewelry.InlayCraft = "包镶"
return b
}
func (b *RubyNecklaceBuilder) DoEngraving() JewelryBuilder {
b.jewelry.Engraving = "平安喜乐"
return b
}
func (b *RubyNecklaceBuilder) CheckQuality() JewelryBuilder {
b.jewelry.QualityOK = true
return b
}
func (b *RubyNecklaceBuilder) Build() *product.Jewelry {
return b.jewelry
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Builder Pattern
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 6:20
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : director.go
*/
package director
import (
"godesginpattern/Builder/builder"
"godesginpattern/Builder/product"
)
// Director 指挥者:统一控制珠宝制作步骤
type Director struct {
builder builder.JewelryBuilder
}
func NewDirector(b builder.JewelryBuilder) *Director {
return &Director{builder: b}
}
// MakeJewelry 固定制作流程(步骤不可乱)
func (d *Director) MakeJewelry() *product.Jewelry {
return d.builder.
SetName().
SelectMaterial().
SelectGem().
ChooseInlay().
DoEngraving().
CheckQuality().
Build()
}
调用:
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Builder Pattern
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 6:23
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : builderbll.go
*/
package bll
import (
"godesginpattern/Builder/builder"
"godesginpattern/Builder/director"
)
// 示例
func BuilderMain() {
// 1. 制作钻戒
ringBuilder := builder.NewDiamondRingBuilder()
director.NewDirector(ringBuilder).MakeJewelry().ShowInfo()
// 2. 制作红宝石项链
necklaceBuilder := builder.NewRubyNecklaceBuilder()
director.NewDirector(necklaceBuilder).MakeJewelry().ShowInfo()
}
输出:

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号