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

输出:

相关推荐
金融数据出海6 小时前
韩国股票 API 对接指南 Seoul&KOSDAQ
后端
咕白m6256 小时前
Python 高效添加与管理 Excel 工作表
后端·python
计算机学姐7 小时前
基于SpringBoot的房屋交易系统
java·vue.js·spring boot·后端·spring·intellij-idea·mybatis
xixixi777777 小时前
从5G标准到6G前沿:Polar码的技术演进与未来之路
开发语言·人工智能·5g·大模型·php·通信·polar码
小二李7 小时前
什么是依赖注入(DI)&控制反转IoC
java·开发语言
亿牛云爬虫专家7 小时前
生产级Go高并发爬虫实战:突破 net_http 长连接与隧道代理IP切换陷阱
爬虫·http·golang·代理ip·keepalive·隧道代理·https connect
java1234_小锋7 小时前
SpringBoot 4 + Spring Security 7 + Vue3 前后端分离项目设计最佳实践
spring boot·后端·spring
今夕资源网7 小时前
indextts API 阅读 API 重磅升级!低延迟 + 音色管理 + 缓存全拉满 支持开源阅读小说软件,其他软件应该也通用
java·后端·spring
是宇写的啊7 小时前
SpringIoc和Di
java·开发语言