go: Abstract Factory Pattern

项目结构::

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Abstract 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/16 21:57
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : product.go
*/
package product
 
// JewelryBase 所有珠宝的基础属性
type JewelryBase struct {
    Material string  // 材质
    Weight   float64 // 重量(克)
    Purity   float64 // 纯度(%)
}
 
// Ring 戒指产品接口
type Ring interface {
    Produce() string
    CalculateCost() float64
    QualityCheck() string
    GetInfo() JewelryBase
}
 
// Necklace 项链产品接口
type Necklace interface {
    Produce() string
    CalculateCost() float64
    QualityCheck() string
    GetInfo() JewelryBase
}
 
// Earring 耳环产品接口
type Earring interface {
    Produce() string
    CalculateCost() float64
    QualityCheck() string
    GetInfo() JewelryBase
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Abstract 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/16 21:58
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : cartier_jewelry.go
*/
package product
 
// CartierRing 卡地亚戒指
type CartierRing struct {
    base JewelryBase
}
 
func NewCartierRing() Ring {
    return &CartierRing{
        base: JewelryBase{Material: "18K金+钻石", Weight: 8, Purity: 0.75},
    }
}
 
func (c *CartierRing) Produce() string {
    return "18K金底座+钻石镶嵌工艺"
}
func (c *CartierRing) CalculateCost() float64 {
    return c.base.Weight*500*c.base.Purity + 2000
}
func (c *CartierRing) QualityCheck() string {
    return "18K金纯度≥75%,钻石无瑕疵,合格"
}
func (c *CartierRing) GetInfo() JewelryBase {
    return c.base
}
 
// CartierNecklace 卡地亚项链
type CartierNecklace struct {
    base JewelryBase
}
 
func NewCartierNecklace() Necklace {
    return &CartierNecklace{
        base: JewelryBase{Material: "18K金+钻石", Weight: 15, Purity: 0.75},
    }
}
 
func (c *CartierNecklace) Produce() string {
    return "18K金链条+钻石吊坠工艺"
}
func (c *CartierNecklace) CalculateCost() float64 {
    return c.base.Weight*500*c.base.Purity + 3000
}
func (c *CartierNecklace) QualityCheck() string {
    return "链条无变形,钻石镶嵌牢固,合格"
}
func (c *CartierNecklace) GetInfo() JewelryBase {
    return c.base
}
 
// CartierEarring 卡地亚耳环
type CartierEarring struct {
    base JewelryBase
}
 
func NewCartierEarring() Earring {
    return &CartierEarring{
        base: JewelryBase{Material: "18K金+钻石", Weight: 5, Purity: 0.75},
    }
}
 
func (c *CartierEarring) Produce() string {
    return "18K金耳针+钻石装饰工艺"
}
func (c *CartierEarring) CalculateCost() float64 {
    return c.base.Weight*500*c.base.Purity + 1500
}
func (c *CartierEarring) QualityCheck() string {
    return "佩戴舒适,钻石无脱落风险,合格"
}
func (c *CartierEarring) GetInfo() JewelryBase {
    return c.base
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Abstract 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/16 21:58
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : tiffany_jewelry.go
*/
package product
 
// TiffanyRing 蒂芙尼戒指
type TiffanyRing struct {
    base JewelryBase
}
 
func NewTiffanyRing() Ring {
    return &TiffanyRing{
        base: JewelryBase{Material: "铂金+蓝宝石", Weight: 7, Purity: 0.95},
    }
}
 
func (t *TiffanyRing) Produce() string {
    return "铂金底座+蓝宝石镶嵌工艺"
}
func (t *TiffanyRing) CalculateCost() float64 {
    return t.base.Weight*800*t.base.Purity + 2500
}
func (t *TiffanyRing) QualityCheck() string {
    return "铂金纯度≥95%,蓝宝石无裂纹,合格"
}
func (t *TiffanyRing) GetInfo() JewelryBase {
    return t.base
}
 
// TiffanyNecklace 蒂芙尼项链
type TiffanyNecklace struct {
    base JewelryBase
}
 
func NewTiffanyNecklace() Necklace {
    return &TiffanyNecklace{
        base: JewelryBase{Material: "铂金+蓝宝石", Weight: 14, Purity: 0.95},
    }
}
 
func (t *TiffanyNecklace) Produce() string {
    return "铂金链条+蓝宝石吊坠工艺"
}
func (t *TiffanyNecklace) CalculateCost() float64 {
    return t.base.Weight*800*t.base.Purity + 3500
}
func (t *TiffanyNecklace) QualityCheck() string {
    return "抛光达标,蓝宝石颜色均匀,合格"
}
func (t *TiffanyNecklace) GetInfo() JewelryBase {
    return t.base
}
 
// TiffanyEarring 蒂芙尼耳环
type TiffanyEarring struct {
    base JewelryBase
}
 
func NewTiffanyEarring() Earring {
    return &TiffanyEarring{
        base: JewelryBase{Material: "铂金+蓝宝石", Weight: 4, Purity: 0.95},
    }
}
 
func (t *TiffanyEarring) Produce() string {
    return "铂金耳针+蓝宝石装饰工艺"
}
func (t *TiffanyEarring) CalculateCost() float64 {
    return t.base.Weight*800*t.base.Purity + 1800
}
func (t *TiffanyEarring) QualityCheck() string {
    return "材质无过敏,镶嵌工艺达标,合格"
}
func (t *TiffanyEarring) GetInfo() JewelryBase {
    return t.base
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Abstract 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/16 21:57
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : factory.go
*/
package factory
 
import "godesginpattern/abstractfactory/product"
 
// JewelryFactory 抽象工厂:品牌生产线标准
type JewelryFactory interface {
    CreateRing() product.Ring
    CreateNecklace() product.Necklace
    CreateEarring() product.Earring
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Abstract 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/16 21:57
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : cartier.go
*/
package factory
 
import "godesginpattern/abstractfactory/product"
 
// CartierFactory 卡地亚具体工厂
type CartierFactory struct{}
 
func (c *CartierFactory) CreateRing() product.Ring {
    return product.NewCartierRing()
}
 
func (c *CartierFactory) CreateNecklace() product.Necklace {
    return product.NewCartierNecklace()
}
 
func (c *CartierFactory) CreateEarring() product.Earring {
    return product.NewCartierEarring()
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Abstract 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/16 21:57
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : tiffany.go
*/
package factory
 
import "godesginpattern/abstractfactory/product"
 
// TiffanyFactory 蒂芙尼具体工厂
type TiffanyFactory struct{}
 
func (t *TiffanyFactory) CreateRing() product.Ring {
    return product.NewTiffanyRing()
}
 
func (t *TiffanyFactory) CreateNecklace() product.Necklace {
    return product.NewTiffanyNecklace()
}
 
func (t *TiffanyFactory) CreateEarring() product.Earring {
    return product.NewTiffanyEarring()
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:  Abstract 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/16 21:58
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : production.go
*/
package service
 
import (
    "fmt"
    "godesginpattern/abstractfactory/factory"
)
 
// JewelryProductionLine 统一生产线:生产 → 算成本 → 质检
func JewelryProductionLine(f factory.JewelryFactory, brandName string) {
    fmt.Printf("========== %s 珠宝生产线 ==========\n", brandName)
 
    // 戒指
    ring := f.CreateRing()
    fmt.Printf("\n【%s戒指】\n生产:%s\n成本:%.2f 元\n质检:%s\n",
        brandName, ring.Produce(), ring.CalculateCost(), ring.QualityCheck())
 
    // 项链
    necklace := f.CreateNecklace()
    fmt.Printf("\n【%s项链】\n生产:%s\n成本:%.2f 元\n质检:%s\n",
        brandName, necklace.Produce(), necklace.CalculateCost(), necklace.QualityCheck())
 
    // 耳环
    earring := f.CreateEarring()
    fmt.Printf("\n【%s耳环】\n生产:%s\n成本:%.2f 元\n质检:%s\n",
        brandName, earring.Produce(), earring.CalculateCost(), earring.QualityCheck())
 
    fmt.Println("====================================\n")
}

调用:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# 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/16 22:04
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : abstractfactorybll.go
*/
package bll
 
import (
    "godesginpattern/abstractfactory/factory"
    "godesginpattern/abstractfactory/service"
)
 
// 显示示例
func AbstractFactoryMain() {
    // 卡地亚生产线
    cartierFactory := &factory.CartierFactory{}
    service.JewelryProductionLine(cartierFactory, "卡地亚")
 
    // 蒂芙尼生产线
    tiffanyFactory := &factory.TiffanyFactory{}
    service.JewelryProductionLine(tiffanyFactory, "蒂芙尼")
}

输出:

相关推荐
郑州光合科技余经理1 分钟前
海外版外卖系统架构:订单怎么流转、权限怎么分
java·开发语言·前端·系统架构·uni-app·php·ai编程
Python 实战手记2 分钟前
企业微信主体变更公证书办理全解析:适用场景、材料规范、踩坑点与Python信息校验脚本
开发语言·python·企业微信
用户202252215063 分钟前
字节发布"豆包工作",我从AI PM角度看到的不是功能,是上下文
设计模式
longxiaozhang63 分钟前
C#异常处理:程序出错了怎么办?
开发语言·数据库·c#
郝学胜-神的一滴13 分钟前
Effective Python 条款 1:确认你正在使用的 Python 版本
开发语言·数据结构·python·程序人生·算法
提线木偶17 分钟前
CORS 到底谁说了算?一份跨域配置的避坑指南
前端·后端
路多辛40 分钟前
全能型 Go Agent 框架 covonaut v1.0.8 发布:新增行内补全与多后端可观测性
开发语言·golang·agent
大模型丫丫42 分钟前
FastAPI 入门指南:从零开始构建高性能 Python API
开发语言·python·fastapi
wuyk5551 小时前
《WiFi 嵌入式物联网开发全套实战》| 第01章 WiFi整体架构详解:BSS/ESS/AP/STA模式彻底区分
开发语言·stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
wuyk5551 小时前
第六章:CAN 调试工具、抓包分析、全套故障排查 + CAN-FD 进阶拓展
开发语言·stm32·单片机