go: Prototype Pattern

项目结构:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Prototype 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/18 21:48
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : jewelry_model.go
*/
package model
 
// JewelryModel 珠宝数据模型
type JewelryModel struct {
    // 基础属性(原型复用)
    Material   string  // 材质
    GoldWeight float64 // 金重
    StoneType  string  // 主石
    StoneCarat float64 // 克拉
    Craft      string  // 工艺
    BasePrice  float64 // 基础价
 
    // 定制属性
    CertNo    string // 证书号
    Engraving string // 刻字
    CustomID  string // 定制单号
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Prototype 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/18 21:49
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : jewelry.go
*/
package prototype
 
import "godesginpattern/prototype/model"
 
// Prototype 原型接口
type Prototype interface {
    Clone() Prototype
}
 
// JewelryPrototype 珠宝原型
type JewelryPrototype struct {
    Data model.JewelryModel // 依赖模型
}
 
// Clone 克隆方法(深拷贝)
func (j *JewelryPrototype) Clone() Prototype {
    return &JewelryPrototype{
        Data: j.Data, // Go 值拷贝 = 深拷贝
    }
}
 
// Customize 定制方法
func (j *JewelryPrototype) Customize(certNo, engraving string) {
    j.Data.CertNo = certNo
    j.Data.Engraving = engraving
    j.Data.CustomID = "CUST_" + certNo
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Prototype 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/18 21:49
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : prototype_builder.go
*/
package builder
 
import (
    "godesginpattern/prototype/model"
    "godesginpattern/prototype/prototype"
)
 
// NewClassicDiamondRing 经典六爪钻戒原型
func NewClassicDiamondRing() *prototype.JewelryPrototype {
    return &prototype.JewelryPrototype{
        Data: model.JewelryModel{
            Material:   "PT950铂金",
            GoldWeight: 3.2,
            StoneType:  "天然钻石",
            StoneCarat: 0.5,
            Craft:      "六爪镶+高抛光",
            BasePrice:  12999.00,
        },
    }
}
 
// NewGoldBangle 足金手镯原型
func NewGoldBangle() *prototype.JewelryPrototype {
    return &prototype.JewelryPrototype{
        Data: model.JewelryModel{
            Material:   "足金999",
            GoldWeight: 20.5,
            StoneType:  "无宝石",
            StoneCarat: 0,
            Craft:      "哑光磨砂",
            BasePrice:  8999.00,
        },
    }
}
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Prototype 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/18 21:49
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : customize_service.go
*/
package service
 
import (
    "fmt"
    "godesginpattern/prototype/prototype"
)
 
// CustomizeService 定制服务
type CustomizeService struct{}
 
// CreateCustomJewelry 克隆原型并生成定制珠宝
func (s *CustomizeService) CreateCustomJewelry(
    proto *prototype.JewelryPrototype,
    certNo, engraving string,
) *prototype.JewelryPrototype {
    // 克隆
    customObj := proto.Clone().(*prototype.JewelryPrototype)
    // 定制
    customObj.Customize(certNo, engraving)
    return customObj
}
 
// ShowInfo 打印详情
func (s *CustomizeService) ShowInfo(j *prototype.JewelryPrototype) {
    m := j.Data
    fmt.Printf("=== 定制珠宝信息 ===\n")
    fmt.Printf("材质:%s | 金重:%.2fg | 主石:%s(%.2fct)\n", m.Material, m.GoldWeight, m.StoneType, m.StoneCarat)
    fmt.Printf("工艺:%s | 基础价:%.2f\n", m.Craft, m.BasePrice)
    fmt.Printf("证书号:%s | 刻字:%s | 单号:%s\n", m.CertNo, m.Engraving, m.CustomID)
    fmt.Println("---------------------------")
} 

调用:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Prototype 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/18 21:52
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : prototypebll.go
真正企业级结构化、严格分层、职责单一、完全可扩展
结构化 + 分层清晰 + 职责单一 + 易扩展
✅ 结构化
严格按照企业级 Go 项目结构分层
✅ 分层明确
model:数据
prototype:克隆
builder:造原型
service:业务服务
cmd:入口
✅ 职责单一
每层只做一件事,互不干扰
✅ 极易扩展
新增珠宝款式:只加 builder
新增属性:只改 model
新增服务:只加 service
新增克隆类型:只加 prototype
✅ 适合生产环境
无冗余、无耦合、可维护、可测试、可文档化
Prototype/
├── go.mod                    // 项目模块
├── cmd/
│   └── main.go               // 系统入口(仅启动,无业务)
├── internal/
│   ├── prototype/            // 原型层:定义可克隆对象(核心)
│   │   └── jewelry.go
│   ├── builder/              // 构建层:创建基础原型(职责单一)
│   │   └── prototype_builder.go
│   ├── service/              // 服务层:批量定制业务逻辑
│   │   └── customize_service.go
│   └── model/                // 模型层:纯数据结构
│       └── jewelry_model.go
└── README.md                 // 架构说明
*/
package bll
 
import (
    "godesginpattern/prototype/builder"
    "godesginpattern/prototype/service"
)
 
func PrototypeMain() {
    // 初始化服务
    customService := &service.CustomizeService{}
 
    // 创建基础原型
    ringProto := builder.NewClassicDiamondRing()
    bangleProto := builder.NewGoldBangle()
 
    // 批量定制
    ring1 := customService.CreateCustomJewelry(ringProto, "GIA1001", "一生一世·张三")
    ring2 := customService.CreateCustomJewelry(ringProto, "GIA1002", "执子之手·李四")
    bangle1 := customService.CreateCustomJewelry(bangleProto, "NGTC2001", "平安喜乐·王五")
 
    // 输出
    customService.ShowInfo(ring1)
    customService.ShowInfo(ring2)
    customService.ShowInfo(bangle1)
} 

输出:

相关推荐
九九落12 分钟前
JavaScript 实现北京时间精确到毫秒显示:UTC+8、Asia/Shanghai 与在线时间校准详解
开发语言·javascript·ecmascript
东华万里41 分钟前
第41篇 C++类与对象核心知识梳理:从底层原理到面试实战
开发语言·c++·大学生专区
路多辛1 小时前
全能型 Agent covo-agent v0.0.7 发布:TUI 新增 LLM 内联自动补全
golang
微小冷1 小时前
Python图论库NetworkX初步
开发语言·python·图论·graph·networkx·digraph
圣殿骑士-Khtangc2 小时前
Gin优雅关停与平滑重启从零停机到热更新
golang·gin
Data_Journal2 小时前
如何使用 Python 抓取 Google Flights:分步指南
大数据·开发语言·数据库·python·scrapy
程序员z72 小时前
深入理解 GMP 模型:Go 协程调度器的设计与调度场景全解析
服务器·网络·golang
AI人工智能+电脑小能手2 小时前
大白话说Java设计模式-34-命令模式(业务实战篇)
java·spring·设计模式·命令模式·异步任务·撤销重做·事务封装
一直C2 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表
Kismet_nvi2 小时前
Python 基础核心知识点总结
开发语言·windows·python