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

go: Simple Factory Pattern

作者头像
geovindu
发布2026-06-18 19:23:24
发布2026-06-18 19:23:24
830
举报

项目结构:

代码语言:javascript
复制
/*
# 版权所有  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("不支持生产该类型珠宝")
    }
} 

调用

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

输出:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档