首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >go: Builder Pattern

go: Builder Pattern

作者头像
geovindu
发布2026-06-18 19:21:02
发布2026-06-18 19:21:02
1750
举报

项目结构:

代码语言:javascript
复制
/*
# 版权所有  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("----------------------------------------")
}
代码语言:javascript
复制
/*
# 版权所有  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
}
代码语言:javascript
复制
/*
# 版权所有  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()
}

调用:

代码语言:javascript
复制
/*
# 版权所有  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()
}

输出:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档