当前位置: 首页 > article >正文

go: Visitor Pattern

项目结构/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Visitor 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/23 20:16 # User : geovindu # Product : GoLand # Project : godesginpattern # File : jewelry.go */ package domain // Jewel 珠宝接口 // 这里只定义 Accept不引用任何 Visitor 接口 type Jewel interface { Accept(v any) } // Diamond 钻石 type Diamond struct { Carat float64 Clarity string PricePerCarat float64 } func (d *Diamond) Accept(v any) { // 由 visitor 内部断言处理 } // Gold 黄金 type Gold struct { Weight float64 Purity string PricePerGram float64 } func (g *Gold) Accept(v any) {} // Jade 翡翠 type Jade struct { Color string Texture string BasePrice float64 } func (j *Jade) Accept(v any) {}/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Visitor 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/23 20:17 # User : geovindu # Product : GoLand # Project : godesginpattern # File : cleaner.go */ package visitor import ( fmt godesginpattern/visitordesgin/domain ) // Cleaner 清洁师 type Cleaner struct{} func NewCleaner() *Cleaner { return Cleaner{} } func (c *Cleaner) VisitDiamond(d *domain.Diamond) { fmt.Println([清洁] 钻石超声波深度去污) } func (c *Cleaner) VisitGold(g *domain.Gold) { fmt.Println([清洁] 黄金酸洗抛光提亮) } func (c *Cleaner) VisitJade(j *domain.Jade) { fmt.Println([清洁] 翡翠软布温水养护) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Visitor 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/23 20:17 # User : geovindu # Product : GoLand # Project : godesginpattern # File : identifier.go */ package visitor import ( fmt godesginpattern/visitordesgin/domain ) // Identifier 鉴定师 type Identifier struct{} func NewIdentifier() *Identifier { return Identifier{} } func (i *Identifier) VisitDiamond(d *domain.Diamond) { fmt.Printf([鉴定] 钻石净度 %s - 优质天然钻\n, d.Clarity) } func (i *Identifier) VisitGold(g *domain.Gold) { fmt.Printf([鉴定] 黄金纯度 %s - 高纯度足金\n, g.Purity) } func (i *Identifier) VisitJade(j *domain.Jade) { fmt.Printf([鉴定] 翡翠 %s/%s - 天然A货\n, j.Color, j.Texture) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Visitor 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/23 20:17 # User : geovindu # Product : GoLand # Project : godesginpattern # File : iface.go */ package visitor import godesginpattern/visitordesgin/domain // Visitor 接口 放在 visitor 包内 // 单向依赖 domain无循环 type Visitor interface { VisitDiamond(d *domain.Diamond) VisitGold(g *domain.Gold) VisitJade(j *domain.Jade) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Visitor 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/23 20:17 # User : geovindu # Product : GoLand # Project : godesginpattern # File : valuator.go */ package visitor import ( fmt godesginpattern/visitordesgin/domain ) // Valuator 估值师 type Valuator struct{} func NewValuator() *Valuator { return Valuator{} } // VisitDiamond 钻石估值 func (v *Valuator) VisitDiamond(d *domain.Diamond) { total : d.Carat * d.PricePerCarat fmt.Printf([估值] 钻石 %.2f克拉 | 总价: %.2f\n, d.Carat, total) } // VisitGold 黄金估值 func (v *Valuator) VisitGold(g *domain.Gold) { total : g.Weight * g.PricePerGram fmt.Printf([估值] 黄金 %.2fg | 总价: %.2f\n, g.Weight, total) } // VisitJade 翡翠估值 func (v *Valuator) VisitJade(j *domain.Jade) { fmt.Printf([估值] 翡翠 %s/%s | 评估价: %.2f\n, j.Color, j.Texture, j.BasePrice) }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Visitor 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/23 20:17 # User : geovindu # Product : GoLand # Project : godesginpattern # File : collection.go */ package structure import ( godesginpattern/visitordesgin/domain godesginpattern/visitordesgin/visitor ) // JewelCollection 珠宝集合 type JewelCollection struct { jewels []domain.Jewel } func NewJewelCollection() *JewelCollection { return JewelCollection{ jewels: make([]domain.Jewel, 0), } } // Add 添加珠宝 func (c *JewelCollection) Add(j domain.Jewel) { c.jewels append(c.jewels, j) } // Accept 访问者处理所有珠宝 func (c *JewelCollection) Accept(v visitor.Visitor) { for _, item : range c.jewels { switch j : item.(type) { case *domain.Diamond: v.VisitDiamond(j) case *domain.Gold: v.VisitGold(j) case *domain.Jade: v.VisitJade(j) } } }调用/* # 版权所有 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/23 20:36 # User : geovindu # Product : GoLand # Project : godesginpattern # File : visitorbll.go */ package bll import ( fmt godesginpattern/visitordesgin/domain godesginpattern/visitordesgin/structure godesginpattern/visitordesgin/visitor ) func VisitorMain() { // 1. 创建珠宝 diamond : domain.Diamond{Carat: 1.5, Clarity: VVS1, PricePerCarat: 80000} gold : domain.Gold{Weight: 20, Purity: 9999, PricePerGram: 600} jade : domain.Jade{Color: 帝王绿, Texture: 玻璃种, BasePrice: 180000} // 2. 创建集合 coll : structure.NewJewelCollection() coll.Add(diamond) coll.Add(gold) coll.Add(jade) // 3. 执行访问者统一用 fmt 保证输出顺序正确 fmt.Println( 估值师 ) coll.Accept(visitor.NewValuator()) fmt.Println(\n 鉴定师 ) coll.Accept(visitor.NewIdentifier()) fmt.Println(\n 清洁师 ) coll.Accept(visitor.NewCleaner()) }输出

相关文章:

go: Visitor Pattern

项目结构: /* # 版权所有 2026 ©涂聚文有限公司™ # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Visitor Pattern 访问者模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2…...

Fluent新手避坑指南:手把手教你搞定冰块融化模拟(附VOF模型设置要点)

Fluent新手避坑指南:手把手教你搞定冰块融化模拟 1. 为什么你的冰块融化模拟总是失败? 刚接触Fluent的CFD新手们,往往会被看似简单的冰块融化模拟问题难住。明明按照教程一步步操作,却总是遇到计算发散、结果异常的情况。这背后隐…...

Windows和Office激活终极解决方案:KMS_VL_ALL_AIO一键智能激活指南

Windows和Office激活终极解决方案:KMS_VL_ALL_AIO一键智能激活指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?Office软件突然变成只读…...

douyin-downloader实战:3种高效方案解决抖音内容批量采集难题

douyin-downloader实战:3种高效方案解决抖音内容批量采集难题 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

5个步骤将普通望远镜升级为智能天文观测系统:OnStep开源控制器完全指南

5个步骤将普通望远镜升级为智能天文观测系统:OnStep开源控制器完全指南 【免费下载链接】OnStep Arduino telescope goto for equatorial and alt/az mounts 项目地址: https://gitcode.com/gh_mirrors/on/OnStep 你是否曾经仰望星空,梦想拥有一台…...

求求影刀小红书数据批量抓取全攻略原件

求一个原件...

英雄联盟国服免费换肤终极教程:R3nzSkin完整使用指南

英雄联盟国服免费换肤终极教程:R3nzSkin完整使用指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 厌倦了英雄联盟国服中单调的默认皮肤&…...

2025届学术党必备的六大AI辅助写作助手推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网针对人工智能生成内容即AIGC,已构建专项检测系统,此系统用来识别…...

2026年终极指南:如何使用BiliTools轻松下载B站视频和番剧资源

2026年终极指南:如何使用BiliTools轻松下载B站视频和番剧资源 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools…...

道 RAG 基础概念知识点/面试题总结

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

Cesium实战:手把手教你实现一个可拖拽编辑的交互式绘图工具(点线面圆矩形)

Cesium交互式绘图工具开发实战:从基础绘制到可编辑图形引擎 在三维地理信息系统开发中,交互式绘图功能已经成为行业标配需求。本文将深入探讨如何基于Cesium构建一个功能完备的绘图工具模块,不仅实现基础的点线面绘制,更重点解决图…...

Talk It 文字转语音:优缺点分析,寻找替代方案

您是否尝试过 Talkit,但发现它难以满足您的文本转语音需求?或者您只是想在安装 Talkit 应用之前了解一下它?无论如何,您都可以在本文中找到答案。我们测试了这款应用以及一些替代方案,并在下文中进行了总结。您可以轻松…...

马斯克起诉OpenAI开庭,索赔最高1800亿美元,案件责任认定5月21日结束

奥尔特曼、布罗克曼到场,马斯克未出席 当地时间4月27日上午,案件如期开庭,进入陪审团遴选阶段。据彭博社报道,奥尔特曼和布罗克曼亲自到场,这对于知名科技高管来说较为罕见,一般不会出庭,马斯克…...

ARM处理器ETB调试系统架构与配置指南

1. ARM RealView ETB调试系统架构解析嵌入式追踪缓冲器(ETT Buffer)作为ARM处理器调试体系的核心组件,其硬件架构由三大部分构成:追踪数据采集单元(ETM)、数据缓冲单元(ETB)以及调试接口单元(JTAG)。在ARM926EJ-S和ARM1136J-S等经典处理器中,…...

Windows 11任务栏歌词插件终极指南:桌面歌词悬浮完整方案

Windows 11任务栏歌词插件终极指南:桌面歌词悬浮完整方案 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 还在为听歌时需要频…...

基于安卓的家电以旧换新评估系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于安卓平台的智能化家电以旧换新评估系统,以解决传统家电回收评估过程中存在的信息不对称、评估标准不统一及资源利用效率低下等…...

AMD Ryzen终极调试指南:SMUDebugTool深度使用教程

AMD Ryzen终极调试指南:SMUDebugTool深度使用教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

ChatGPT 图像2.0发布:开发者最该关注的5个变化与上手清单

先说结论 如果你只记一件事:这次不是“画得更好看”这么简单,而是“更能按指令把图做对”。 对开发者最直接的价值是:做封面图、流程图、UI 草图、运营图时,返工次数会明显下降。一、ChatGPT 图像 2.0 到底是什么 根据 OpenAI 202…...

基于vue的鲜花销售网站[vue]-计算机毕业设计源码+LW文档

摘要:随着互联网技术的发展和人们消费习惯的改变,线上鲜花销售市场前景广阔。本文介绍了一个基于Vue框架开发的鲜花销售网站,详细阐述了其设计目标、采用的相关技术、需求分析、系统设计以及具体的实现过程。该网站实现了用户管理、商品展示与…...

【论文解读】Deformable Mamba for Wide Field of View Segmentation

论文题目:Deformable Mamba for Wide Field of View Segmentation 论文链接:https://arxiv.org/pdf/2411.164811. Abstract 宽视场(WFoV)图像分割对于自动驾驶至关重要,但面临着两大挑战:一是广角镜头带来的…...

升级鸿蒙6后,大家担心的痛点都搞定啦!真香!

朋友们,被用户追着说“还不去适配鸿蒙”的产品经理委托我发篇贴。 最近我在各大极客论坛看到好多鸿蒙6先锋用户在担心:鸿蒙6是真流畅,但你们升级后最怕的不是“卡”,而是“空”——书架空了、网盘空了、连看视频的快乐都没了。 …...

(课堂笔记)SQL 高级查询技巧:行列转换、重复数据、递归查询、连续登录

📝SQL高级查询技巧本笔记总结了SQL数据处理中的5个核心技巧:1)行列转换:使用CASE WHEN/PIVOT实现行转列,UNION ALL/UNPIVOT实现列转行;2)伪列应用:ROWNUM分页查询,ROWID精确去重;3)重…...

League Akari终极指南:英雄联盟智能自动化工具完全教程

League Akari终极指南:英雄联盟智能自动化工具完全教程 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于英雄…...

FPGA图像处理提速秘籍:用双口RAM乒乓操作实现1080P视频流无缝缓存(实战篇)

FPGA图像处理提速秘籍:双口RAM乒乓操作实现1080P视频流无缝缓存实战 在实时视频处理领域,1080P60fps的高清视频流对硬件处理能力提出了严峻挑战。当数据速率达到148.5MHz(1920108060)时,传统单缓存架构往往难以避免帧…...

别再只会画板子了!用AD16仿真验证你的电路设计,保姆级避坑指南

从原理图到可靠设计:AD16电路仿真实战避坑手册 在硬件开发流程中,电路仿真常常被工程师们视为"可有可无"的步骤——直到某次打板后发现设计存在致命缺陷。Altium Designer 16内置的混合信号仿真工具,实际上是一个被严重低估的设计验…...

OpenCore Configurator:黑苹果引导配置的终极图形化解决方案

OpenCore Configurator:黑苹果引导配置的终极图形化解决方案 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator 在非苹果硬件上运行macOS&#xff08…...

STM32F103驱动四路直流减速电机:DRV8848硬件连接与PWM配置避坑指南

STM32F103驱动四路直流减速电机:DRV8848硬件连接与PWM配置避坑指南 在机器人底盘或智能小车项目中,直流减速电机的稳定驱动是核心环节。许多嵌入式开发者初次使用STM32F103搭配DRV8848驱动模块时,常会遇到电机不转、异常抖动或控制失准等问题…...

告别绿幕!3分钟掌握OBS AI背景移除插件,让直播画面瞬间升级

告别绿幕!3分钟掌握OBS AI背景移除插件,让直播画面瞬间升级 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项…...

2026主流GEO优化公司实测推荐-技术自研与交付能力TOP5综合排行

一、市场形势:2026年GEO从“可选”到“必选”2026年,生成式AI已成为用户获取信息的第一入口。据CNNIC数据,中国生成式AI用户规模达5.15亿,半数网民将AI作为消费决策依据。与此同时,IDC报告显示2026年全球GEO市场规模已…...

怎样高效使用开源工具KeymouseGo:3种实用技巧与实战方案告别重复工作

怎样高效使用开源工具KeymouseGo:3种实用技巧与实战方案告别重复工作 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo…...