Golang工厂模式创建对象完整示例

工厂模式通过接口和工厂函数解耦对象创建与使用。定义Shape接口及Circle、Rectangle实现类型,Draw方法返回绘制信息;NewShape函数根据传入的字符串参数返回对应形状实例;main函数调用NewShape创建对象并调用Draw方法,输出“Drawing a circle”和“Drawing a rectangle”。该模式适用于需动态确定类型的场景,提升代码可维护性和扩展性。

golang工厂模式创建对象完整示例

在Go语言中,工厂模式是一种常见的创建型设计模式,用于封装对象的创建过程。通过工厂函数或结构体,可以统一管理对象实例化逻辑,提升代码可维护性和扩展性。

定义接口和具体类型

先定义一个接口表示对象的公共行为,再实现多个具体类型。

type Shape interface {
    Draw() string
}

type Circle struct{}

func (c *Circle) Draw() string {
    return “Drawing a circle”
}

type Rectangle struct{}

func (r *Rectangle) Draw() string {
    return “Drawing a rectangle”
}

创建工厂函数

使用函数根据输入参数返回对应的对象实例。

func NewShape(shapeType string) Shape {
    switch shapeType {
    case “circle”:
        return &Circle{}
    case “rectangle”:
        return &Rectangle{}
    default:
        return nil
    }
}

使用工厂创建对象

在主程序中调用工厂函数生成对象并使用。

立即学习“go语言免费学习笔记(深入)”;

func main() {
    shape1 := NewShape(“circle”)
    shape2 := NewShape(“rectangle”)

    if shape1 != nil {
        fmt.Println(shape1.Draw())
    }

    if shape2 != nil {
        fmt.Println(shape2.Draw())
    }
}

运行结果:

Drawing a circle
Drawing a rectangle

基本上就这些。通过接口定义行为,工厂函数按需创建具体类型,调用方无需关心内部实现,解耦清晰。这种模式适合需要动态决定对象类型的场景。

以上就是Golang工厂模式创建对象完整示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1402990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
grafana使用教程 grafana怎么用
上一篇 2025年12月15日 19:11:22
Golang内存使用与程序吞吐量优化
下一篇 2025年12月15日 19:11:34

相关推荐

  • 电源额定功率与峰值功率的标注是否存在误导?

    额定功率是电源能长期稳定输出的最大功率,峰值功率仅为短时爆发能力;选购时应以额定功率为准,结合系统功耗计算、80 PLUS认证、专业评测及品牌口碑,避免被厂商宣传误导。 电源的额定功率与峰值功率的标注,坦白说,确实存在一定的误导性,这更像是一种行业内的“潜规则”或者说营销策略,利用了普通消费者对技术…

    2026年9月9日
    000
  • idea 恢复默认

    重置IntelliJ IDEA需删除配置和缓存目录以恢复默认设置。首先关闭软件,删除Windows下C:Users用户名AppDataRoamingJetBrainsIntelliJIdea或macOS/Linux对应路径的IntelliJIdea文件夹;推荐同时清除Local或Caches下的缓存…

    2026年9月9日
    300
  • mac怎么安装Rosetta 2_mac Rosetta安装步骤

    首先检查是否因缺少Rosetta 2导致应用无法启动,系统首次运行Intel应用时会提示安装,点击安装并授权即可;也可通过终端执行softwareupdate –install-rosetta命令手动安装,输入密码后完成;若需免交互安装,可使用/usr/sbin/softwareupda…

    2026年9月9日
    200
  • Swoole如何实现一个简单的MQTT服务器

    Swoole可通过TCP服务器实现MQTT协议解析,核心包括处理CONNECT、PUBLISH、SUBSCRIBE等报文,管理客户端订阅关系与消息转发,需手动解析变长头部与主题长度,支持PINGREQ心跳与连接状态维护,配合mosquitto工具测试基础通信,适用于轻量级物联网场景,但生产环境需扩展…

    2026年9月9日
    000
  • 华为官宣未来三年规划多款昇腾芯片:明年 Q1 发 950PR

    9 月 18 日,在华为全联接大会 2025 上,华为轮值董事长徐直军正式公布了昇腾 ai 芯片的未来发展规划。接下来三年内,华为将陆续发布多款新一代昇腾芯片,涵盖昇腾 950pr、950dt、960 以及 970 等型号。 华为 在大会的主题演讲中,徐直军详细介绍了昇腾系列芯片的发展路线。按照计划…

    2026年9月9日
    100
  • 如何使用vue调试工具调试动态组件和异步组件_高级组件的vue调试工具调试技巧

    答案:使用Vue Devtools识别组件类型、监控异步加载状态、跟踪动态组件切换、设置断点调试解析逻辑、检查作用域与上下文传递。通过组件树查看异步标识,利用钩子监控pending/resolved/error状态,确保动态组件key唯一,结合Sources面板调试import(),验证provid…

    2026年9月9日
    000
  • laravel如何使用闭包作为路由动作_Laravel闭包路由动作实现方法

    Laravel支持使用闭包定义路由,可在routes/web.php或api.php中直接编写处理逻辑。示例包括:GET请求返回字符串、POST请求返回JSON响应。闭包可自动注入Request等依赖,如通过类型提示获取请求实例。支持带参数的路由,如{id}占位符,可设置类型约束或可选参数(如{sl…

    2026年9月9日
    100
  • 使用Spring Data Elasticsearch按最高得分百分比过滤结果

    本文探讨了在spring data elasticsearch中,如何根据搜索结果的最高得分(maxscore)的百分比来动态过滤文档。由于elasticsearch原生查询难以直接实现这种基于动态阈值的过滤,文章提出并详细阐述了一种实用的客户端分页与过滤策略,通过逐步获取搜索结果并计算阈值,高效地…

    2026年9月9日
    000
  • 如何构建支持冗余备份的私有云存储?

    构建私有云存储需选择对象、文件或块存储技术,实施多副本或纠删码实现冗余,结合负载均衡与分布式协调服务实现自动故障切换,并通过定期备份、监控告警、性能优化等措施保障数据可用性与系统稳定性。 构建支持冗余备份的私有云存储,核心在于确保数据在硬件故障或其他灾难情况下依然可用。这通常涉及数据复制、纠删码、以…

    2026年9月9日
    100
  • 如何利用Wireshark进行深度网络封包分析以诊断应用程序通信故障?

    使用Wireshark诊断通信故障需先正确捕获数据,选择靠近问题源的捕获点,启用混杂模式并限定接口与范围;通过捕获过滤器(如host 192.168.1.100 and port 8080)减少冗余,再用显示过滤器(如http.request.uri contains “/api/log…

    2026年9月9日
    200
  • 免费AIGC入口官网 知网检测链接直达

    目前免费的AIGC降重工具多有限制,知网不提供个人查重服务,所谓“官网直达”不可信。可试用讯飞星火、秘塔AI等工具进行手动修改,但最终须以学校指定的知网等系统检测结果为准,建议优先使用学校提供的查重机会。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 …

    2026年9月9日
    400
  • 17Pro系列新增了哪些新功能?小米17Pro背屏新功能推送详情

    小米17 pro系列近期迎来重要系统更新,其标志性的背部副屏功能获得全面增强。本次升级不仅优化了基础体验,更引入多项创新交互方式,显著提升了这块“第二屏幕”的实用性与可玩性。 一、核心交互体验升级 1、新增“智能情景通知”功能,背屏可根据时间、地点和用户习惯,智能显示会议提醒、出行信息、快递状态等关…

    2026年9月9日
    000
  • win10无法打开JPG图片提示“文件系统错误(-2147219196)”怎么办 _Win10 JPG文件系统错误修复方法

    首先重置并重新注册照片应用,若无效则重置应用本身,接着使用SFC扫描系统文件,最后更新Windows系统以修复JPG图片打开失败的问题。 如果您尝试在Windows 10系统中打开JPG图片时,遇到“文件系统错误(-2147219196)”的提示,这通常表明系统内置的照片应用出现了配置或注册问题。以…

    2026年9月9日
    000
  • Android文件保存教程:解决ENOENT错误与正确管理外部存储路径

    本教程旨在解决android应用中常见的`enoent`(no such file or directory)错误,该错误常发生于尝试将文件保存到外部存储时,尤其是当开发者误用桌面操作系统路径时。文章将深入解析android外部存储机制,指导如何正确使用api,如`environment.getex…

    2026年9月9日
    000
  • 为什么高性能电脑需要配置不间断电源?

    高性能电脑配置UPS的核心原因是为了在电力不稳定时提供保护,防止数据丢失和硬件损坏。它通过稳定电压、过滤电涌,并在断电时提供备用电源,确保设备安全关机或持续运行。对高功耗CPU、GPU及NVMe硬盘等精密组件而言,UPS能显著延长硬件寿命,避免因电压波动导致的慢性损伤。在3D渲染、视频剪辑、代码编译…

    2026年9月9日
    000
  • 如何在Linux中创建软链接和硬链接?

    软链接是独立文件,指向原路径,可跨文件系统,原文件删除后失效;硬链接共享inode,不可跨文件系统或链接目录,删除一个不影响其他。 在Linux中,软链接(符号链接)和硬链接是两种不同的文件引用方式。它们都能让你通过另一个路径访问文件,但底层机制不同,使用场景也有所区别。 什么是软链接和硬链接 软链…

    2026年9月9日
    000
  • VSCode快捷键:代码行移动技巧

    使用快捷键Alt+↑/↓(Windows/Linux)或Option+↑/↓(macOS)可快速移动单行或多行代码,提升编码效率。 在 VSCode 中高效移动代码行,能大幅提升编码流畅度。不需要复制粘贴或手动剪切,几个快捷键就能快速调整代码顺序。 向上/向下移动当前行 选中某一行或让光标位于该行,…

    2026年9月9日
    000
  • 如何在mysql中优化UPDATE和DELETE操作

    答案:优化MySQL的UPDATE和DELETE操作需确保WHERE条件字段有索引,避免全表扫描;对大批量数据分批处理,每次限制影响行数;避免长事务,减少锁争用;选用InnoDB引擎并合理配置缓冲池和日志文件,执行前用EXPLAIN分析计划。 在MySQL中,UPDATE和DELETE操作如果处理不…

    2026年9月9日
    000
  • AI推文助手如何生成品牌口号 AI推文助手的品牌标语创作技巧

    AI推文助手如何生成品牌口号 AI推文助手的品牌标语创作技巧AI推文助手如何生成品牌口号 AI推文助手的品牌标语创作技巧AI推文助手如何生成品牌口号 AI推文助手的品牌标语创作技巧AI推文助手如何生成品牌口号 AI推文助手的品牌标语创作技巧

    答案:通过明确品牌价值、结构化提示词、竞品分析和多轮迭代,可提升AI生成口号的质量。具体步骤包括定义核心关键词,采用“角色+任务+要求”指令结构,参考竞品风格并排除陈词滥调,经多轮优化筛选出简洁有力且具差异化的品牌口号。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Deep…

    2026年9月9日 用户投稿
    000
  • JavaFX弹窗与主界面通信:实现数据回传与UI更新

    本教程详细阐述了如何在javafx应用中,实现从子弹窗(secondary stage)向其拥有者主界面(primary stage)回传数据并更新ui元素。通过利用javafx的数据绑定机制,特别是`stringproperty`,我们能够建立一个高效且健壮的通信通道,避免了因错误实例化控制器而导…

    2026年9月9日
    000

发表回复

登录后才能评论
关注微信