news 2026/4/30 23:29:41

go:Template Method Pattern

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go:Template Method Pattern

项目结构:

/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method 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/25 10:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : jewelry_template.go */ package template import ( "fmt" "godesginpattern/templatemethod/entity" ) // 珠宝制作模板(算法骨架) type JewelryTemplate struct { jewelry entity.Jewelry // 依赖接口,面向抽象编程 } // NewJewelryTemplate 构造函数(企业级必须用构造函数) func NewJewelryTemplate(j entity.Jewelry) *JewelryTemplate { return &JewelryTemplate{jewelry: j} } // Make 模板方法:对外暴露标准制作流程 func (t *JewelryTemplate) Make() { t.selectMaterial() // 1. 选材(通用) fmt.Println(t.jewelry.Shaping()) // 2. 塑形(可变) t.polish() // 3. 打磨(通用) fmt.Println(t.jewelry.Inlay()) // 4. 镶嵌(可变) t.qualityCheck() // 5. 质检(通用) t.finish() // 6. 成品(通用) } // 以下为 通用步骤(私有方法,禁止外部调用) func (t *JewelryTemplate) selectMaterial() { fmt.Println("[通用] 选材:甄选贵金属与天然宝石") } func (t *JewelryTemplate) polish() { fmt.Println("[通用] 打磨:镜面抛光处理") } func (t *JewelryTemplate) qualityCheck() { fmt.Println("[通用] 质检:符合国家珠宝生产标准") } func (t *JewelryTemplate) finish() { fmt.Println("[通用] 成品:防伪编码 + 礼盒包装\n") }
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method 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/25 10:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : jewelry.go */ package entity // 珠宝接口:仅约束可变步骤 type Jewelry interface { Shaping() string // 塑形 Inlay() string // 镶嵌 }
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method 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/25 10:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : ring.go */ package service import "fmt" // Ring 戒指:实现 entity.Jewelry 接口 type Ring struct{} func NewRing() *Ring { return &Ring{} } func (r *Ring) Shaping() string { return fmt.Sprintf("[可变] 戒指塑形:标准戒圈成型") } func (r *Ring) Inlay() string { return fmt.Sprintf("[可变] 戒指镶嵌:单颗主石爪镶工艺") } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method 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/25 10:10 # User : geovindu # Product : GoLand # Project : godesginpattern # File : necklace.go */ package service import "fmt" // Necklace 项链 type Necklace struct{} func NewNecklace() *Necklace { return &Necklace{} } func (n *Necklace) Shaping() string { return fmt.Sprintf("[可变] 项链塑形:链条压制成型") } func (n *Necklace) Inlay() string { return fmt.Sprintf("[可变] 项链镶嵌:碎钻群镶点缀") } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method 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/25 10:10 # User : geovindu # Product : GoLand # Project : godesginpattern # File : bracelet.go */ package service import "fmt" // Bracelet 手镯 type Bracelet struct{} func NewBracelet() *Bracelet { return &Bracelet{} } func (b *Bracelet) Shaping() string { return fmt.Sprintf("[可变] 手镯塑形:宽版镯身压铸") } func (b *Bracelet) Inlay() string { return fmt.Sprintf("[可变] 手镯镶嵌:侧边排镶宝石") }

调用:

/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method 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/25 10:13 # User : geovindu # Product : GoLand # Project : godesginpattern # File : templatemethodbll.go templatemethod/ ├── go.mod # 项目模块 ├── internal/ # 内部包(外部不可访问) │ ├── template/ # 模板层(算法骨架 + 通用步骤) │ │ └── jewelry_template.go │ ├── entity/ # 实体/接口层(定义约束) │ │ └── jewelry.go │ └── service/ # 业务实现层(可变步骤具体实现) │ ├── ring.go │ ├── necklace.go │ └── bracelet.go └── main.go # 入口调用层 */ package bll import ( "fmt" "godesginpattern/templatemethod/service" "godesginpattern/templatemethod/template" ) func TemplateMethodMain() { fmt.Println("=== 企业级珠宝制作系统 ===") // 制作戒指 ring := service.NewRing() template.NewJewelryTemplate(ring).Make() // 制作项链 necklace := service.NewNecklace() template.NewJewelryTemplate(necklace).Make() // 制作手镯 bracelet := service.NewBracelet() template.NewJewelryTemplate(bracelet).Make() }

输出:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 23:27:31

避坑指南:为什么你的OceanBase Docker容器一重启就挂?聊聊daemon.pid文件与容器状态管理

深入解析OceanBase容器化部署中的状态管理陷阱与设计哲学 当我们将OceanBase这样的分布式数据库塞进Docker容器时,本质上是在进行一场微妙的平衡游戏——容器的无状态理想与数据库的有状态现实之间的拉锯战。最近遇到的一个典型案例:原本运行良好的Ocean…

作者头像 李华
网站建设 2026/4/30 23:26:31

从手动操作到智能编程:pycatia如何重塑企业级CAD自动化工作流

从手动操作到智能编程:pycatia如何重塑企业级CAD自动化工作流 【免费下载链接】pycatia python module for CATIA V5 automation 项目地址: https://gitcode.com/gh_mirrors/py/pycatia 在高端制造业数字化转型的浪潮中,企业面临着一个核心矛盾&a…

作者头像 李华
网站建设 2026/4/30 23:22:34

2026届最火的六大降重复率神器实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当人工智能生成内容被广泛运用的当前时刻,把文本里的AI痕迹予以降低变成关键课题…

作者头像 李华
网站建设 2026/4/30 23:16:39

长安链开源训练营结营仪式报名!颁发证书 | 技术分享 | 现场抽奖

执梦前行,终抵繁星经过为期两个月的集中授课与二十天深耕实践的代码实训,长安链开源训练营圆满落下帷幕,所有课程作业及大作业提交通道已经关闭。训练营期间,学员们通过系统学习与深入实践,充分展现了对长安链技术的深…

作者头像 李华
网站建设 2026/4/30 23:15:46

长期主义:在追逐热点的世界里,坚守你的技术信仰

在软件测试行业,热点就如同一场场突如其来的风暴。今天是人工智能测试的风口,明天是低代码测试的热潮,后天又可能被自动化测试的新框架刷屏。无数从业者在热点的裹挟下,如同逐浪的浮萍,不断切换学习方向,生…

作者头像 李华