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

输出:

相关推荐
程序猿编码8 小时前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer
SEO_juper8 小时前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化
程序员cxuan9 小时前
跟 WebUI 说再见了,最强 DeepSeek 桌面端来了!
人工智能·后端·程序员
geovindu9 小时前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
stark张宇9 小时前
从 Paxos 到 Raft:一文讲透分布式一致性与复制状态机
分布式·后端
RsThe9 小时前
Spring AI 2.0:Java AI 开发的分水岭
后端
n8n9 小时前
Spring AI 工具调用实战:模型自主决策、@Tool 方法封装与 ReAct 模式
后端
Tairitsu_H9 小时前
[C++] C++11新增构造:列表初始化和std::initializer_list
开发语言·c++·c++11·构造
只爱喝胡辣汤9 小时前
05-JVM 监控与故障排查工具
后端
宣宣猪的小花园.9 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习