go: Simple Factory Pattern

项目结构:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Simple Factory 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/13 21:52
# User      :  geovindu
# Product   : GoLand
# Project   : sudydemo
# File      : jewelry.go
*/
package simplefactory
 
// Jewelry 珠宝接口,所有珠宝产品都要实现该接口
type Jewelry interface {
    ShowInfo()            // 展示珠宝信息
    MaterialCheck()       // 材质检测(业务流程)
    CustomEngrave(string) // 定制刻字(业务流程)
}
 
// 珠宝类型常量,工厂用来判断生产哪种珠宝
const (
    JewelryTypeRing     = "ring"     // 钻戒
    JewelryTypeNecklace = "necklace" // 项链
    JewelryTypeBracelet = "bracelet" // 手镯
)
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Simple Factory 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/13 21:53
# User      :  geovindu
# Product   : GoLand
# Project   : sudydemo
# File      : ring.go
*/
package simplefactory
 
import "fmt"
 
// DiamondRing 钻戒(具体产品类)
type DiamondRing struct {
    Material string // 材质:铂金/18K金
    Carat    string // 钻石克拉
    Engrave  string // 刻字内容
}
 
// ShowInfo 展示钻戒信息
func (r *DiamondRing) ShowInfo() {
    fmt.Printf("【钻戒】材质:%s | 钻石克拉:%s | 刻字:%s\n", r.Material, r.Carat, r.Engrave)
}
 
// MaterialCheck 钻戒材质检测
func (r *DiamondRing) MaterialCheck() {
    fmt.Printf("✅ 钻戒材质检测完成:%s 材质合格,钻石无瑕疵\n", r.Material)
}
 
// CustomEngrave 钻戒定制刻字
func (r *DiamondRing) CustomEngrave(text string) {
    r.Engrave = text
    fmt.Printf("✍️ 钻戒刻字成功:%s\n", text)
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Simple Factory 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/13 21:53
# User      :  geovindu
# Product   : GoLand
# Project   : sudydemo
# File      : necklace.go
*/
package simplefactory
 
import "fmt"
 
// Necklace 项链(具体产品类)
type Necklace struct {
    Material string // 材质:黄金/白金
    Length   string // 项链长度
    Engrave  string // 刻字内容
}
 
// ShowInfo 展示项链信息
func (n *Necklace) ShowInfo() {
    fmt.Printf("【项链】材质:%s | 长度:%s | 刻字:%s\n", n.Material, n.Length, n.Engrave)
}
 
// MaterialCheck 项链材质检测
func (n *Necklace) MaterialCheck() {
    fmt.Printf("✅ 项链材质检测完成:%s 材质纯度达标\n", n.Material)
}
 
// CustomEngrave 项链定制刻字
func (n *Necklace) CustomEngrave(text string) {
    n.Engrave = text
    fmt.Printf("✍️ 项链刻字成功:%s\n", text)
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Simple Factory 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/13 21:54
# User      :  geovindu
# Product   : GoLand
# Project   : sudydemo
# File      : bracelet.go
*/
package simplefactory
 
import "fmt"
 
// Bracelet 手镯(具体产品类)
type Bracelet struct {
    Material string // 材质:银/翡翠
    Style    string // 款式:素圈/雕花
    Engrave  string // 刻字内容
}
 
// ShowInfo 展示手镯信息
func (b *Bracelet) ShowInfo() {
    fmt.Printf("【手镯】材质:%s | 款式:%s | 刻字:%s\n", b.Material, b.Style, b.Engrave)
}
 
// MaterialCheck 手镯材质检测
func (b *Bracelet) MaterialCheck() {
    fmt.Printf("✅ 手镯材质检测完成:%s 材质无裂纹\n", b.Material)
}
 
// CustomEngrave 手镯定制刻字
func (b *Bracelet) CustomEngrave(text string) {
    b.Engrave = text
    fmt.Printf("✍️ 手镯刻字成功:%s\n", text)
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Simple Factory 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/13 21:54
# User      :  geovindu
# Product   : GoLand
# Project   : sudydemo
# File      : factory.go
*/
package simplefactory
 
import "errors"
 
// JewelryFactory 珠宝加工厂(简单工厂类)
type JewelryFactory struct{}
 
// CreateJewelry 生产珠宝:传入珠宝类型,返回对应的珠宝产品
func (f *JewelryFactory) CreateJewelry(jewelryType string) (Jewelry, error) {
    switch jewelryType {
    case JewelryTypeRing:
        // 生产钻戒:默认配置
        return &DiamondRing{
            Material: "18K白金",
            Carat:    "1克拉",
        }, nil
    case JewelryTypeNecklace:
        // 生产项链:默认配置
        return &Necklace{
            Material: "足金",
            Length:   "45cm",
        }, nil
    case JewelryTypeBracelet:
        // 生产手镯:默认配置
        return &Bracelet{
            Material: "S999纯银",
            Style:    "素圈",
        }, nil
    default:
        return nil, errors.New("不支持生产该类型珠宝")
    }
} 

调用

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述: Simple Factory 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/13 21:55
# User      :  geovindu
# Product   : GoLand
# Project   : sudydemo
# File      : simplefactorybll.go
*/
package bll
 
import (
    "sudydemo/simplefactory"
)
 
// 显示示例
func SimpleFactoryMain() {
    // 1. 初始化珠宝加工厂(工厂实例)
    factory := &simplefactory.JewelryFactory{}
    println("========== 珠宝店下单流程 ==========\n")
 
    // ==================== 订单1:生产钻戒 ====================
    ring, err := factory.CreateJewelry(simplefactory.JewelryTypeRing)
    if err != nil {
        panic(err)
    }
    ring.MaterialCheck()       // 材质检测
    ring.CustomEngrave("永浴爱河") // 定制刻字
    ring.ShowInfo()            // 展示成品
    println()
 
    // ==================== 订单2:生产项链 ====================
    necklace, err := factory.CreateJewelry(simplefactory.JewelryTypeNecklace)
    if err != nil {
        panic(err)
    }
    necklace.MaterialCheck()
    necklace.CustomEngrave("平安喜乐")
    necklace.ShowInfo()
    println()
 
    // ==================== 订单3:生产手镯 ====================
    bracelet, err := factory.CreateJewelry(simplefactory.JewelryTypeBracelet)
    if err != nil {
        panic(err)
    }
    bracelet.MaterialCheck()
    bracelet.CustomEngrave("健康顺遂")
    bracelet.ShowInfo()
}

输出:

相关推荐
葫芦和十三3 小时前
图解 MongoDB 04|索引模型:每建一个索引,就是在 B+-tree 森林里多栽一棵
后端·mongodb·agent
用户47949283569154 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
GetcharZp6 小时前
告别 Nginx 复杂配置!这款带 Web 面板的万能代理神器,让端口转发变得如此简单
后端
IT_陈寒8 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
Pedantic9 小时前
SwiftUI 手势笔记
前端·后端
金銀銅鐵9 小时前
[Python] 从《千字文》中随机挑选汉字
后端·python
怕浪猫10 小时前
领域特定语言(Domain-Specific Language, DSL)
设计模式·程序员·架构
飘尘12 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
浏览器工程师13 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端