Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Golang如何使用工厂方法模式创建多种对象_Golang工厂方法模式对象创建实践详解_创想鸟

Golang如何使用工厂方法模式创建多种对象_Golang工厂方法模式对象创建实践详解

工厂方法模式通过接口和函数在Go中实现对象的动态创建,解耦使用与创建。定义Payment接口及Alipay、WeChatPay等实现,通过NewPayment工厂函数根据类型返回具体实例,并可返回错误提升健壮性,新增类型无需修改客户端代码,符合开闭原则,提升可维护性。

golang如何使用工厂方法模式创建多种对象_golang工厂方法模式对象创建实践详解

在Go语言中,工厂方法模式是一种创建型设计模式,用于在不指定具体类的情况下创建对象。它通过定义一个创建对象的接口,但由子类型决定实例化哪个类。Go没有继承,因此我们通过接口和函数来实现这一模式。这种模式特别适用于需要根据条件创建不同类型对象的场景,比如解析不同格式的文件、连接不同类型的数据库或处理多种消息类型。

工厂方法模式的核心思想

工厂方法模式将对象的创建过程封装起来,客户端无需关心对象的具体类型,只需调用工厂方法获取实例。这样做的好处是解耦了对象的使用与创建,提升了代码的可维护性和扩展性。

在Go中,我们通常使用接口表示产品,用函数或结构体方法作为工厂来生成具体实现。

定义产品接口与具体实现

假设我们要处理不同类型的支付方式,如支付宝、微信支付等。我们可以先定义一个统一的支付接口:

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

type Payment interface {    Pay(amount float64) string}

然后实现具体的支付方式:

type Alipay struct{}func (a *Alipay) Pay(amount float64) string {    return fmt.Sprintf("支付宝支付 %.2f 元", amount)}type WeChatPay struct{}func (w *WeChatPay) Pay(amount float64) string {    return fmt.Sprintf("微信支付 %.2f 元", amount)}

实现工厂方法

接下来定义一个工厂函数,根据传入的支付类型返回对应的支付实例:

func NewPayment(method string) Payment {    switch method {    case "alipay":        return &Alipay{}    case "wechat":        return &WeChatPay{}    default:        panic("不支持的支付方式")    }}

客户端使用时,不需要知道具体类型,只需调用工厂函数:

pay := NewPayment("alipay")result := pay.Pay(99.9)fmt.Println(result) // 输出:支付宝支付 99.90 元

扩展性与错误处理优化

上面的实现直接panic在遇到未知类型时不够友好。可以改为返回错误,让调用方自行处理:

func NewPayment(method string) (Payment, error) {    switch method {    case "alipay":        return &Alipay{}, nil    case "wechat":        return &WeChatPay{}, nil    default:        return nil, fmt.Errorf("不支持的支付方式: %s", method)    }}

调用示例:

pay, err := NewPayment("alipay")if err != nil {    log.Fatal(err)}fmt.Println(pay.Pay(50.0))

当需要新增支付方式(如银联)时,只需添加新结构体并修改工厂函数,其他代码无需改动,符合开闭原则。

基本上就这些。工厂方法模式在Go中虽无传统OOP的继承体系,但凭借接口和函数的一等公民特性,依然能简洁高效地实现对象的动态创建。关键是把创建逻辑集中管理,避免散落在各处,提升项目的可维护性。

以上就是Golang如何使用工厂方法模式创建多种对象_Golang工厂方法模式对象创建实践详解的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Go语言外部包管理:理解GOPATH与go get
上一篇 2025年12月16日 13:31:25
Golang如何实现跨域资源共享CORS
下一篇 2025年12月16日 13:31:34

相关推荐

  • Canva的AI混合工具如何操作?快速设计专业图形与文本的步骤

    Canva的AI混合功能通过Magic Studio将文本、图像生成与智能设计整合,提升创作效率。首先,使用Magic Write生成文案初稿,克服空白页难题;其次,通过Magic Media输入详细描述生成定制化图像,越具体效果越好;再利用Magic Design上传图片或输入文字自动生成多种设计…

    2026年9月22日
    000
  • vivoY系列微信收款语音播报如何设置?快速设置语音的实用方法

    先在微信内开启收款语音提醒,再确保vivo手机系统中微信的通知权限、后台运行和电池优化设置正确,避免静音或勿扰模式干扰,即可解决语音不响问题。 vivo Y系列手机上设置微信收款语音播报,核心在于微信应用内部的设置,同时需要确保手机系统层面的通知权限和后台运行策略没有限制它。简单来说,就是先在微信里…

    2026年9月22日
    000
  • PHPRestfulAPI怎么开发_PHP构建高效安全的RestfulAPI教程

    答案:本文介绍如何用PHP构建高效安全的Restful API,涵盖设计规范、项目结构、数据库操作、安全机制、统一响应格式及性能优化。遵循Restful风格使用标准HTTP方法与状态码,通过index.php统一入口路由请求至控制器;采用PDO预处理防止SQL注入,结合JWT实现认证授权,确保输入验…

    2026年9月22日
    000
  • 《如龙0导剪版》结束Switch2独占 登全平台!不支持原版升级

    《如龙0导剪版》结束Switch2独占 登全平台!不支持原版升级《如龙0导剪版》结束Switch2独占 登全平台!不支持原版升级《如龙0导剪版》结束Switch2独占 登全平台!不支持原版升级《如龙0导剪版》结束Switch2独占 登全平台!不支持原版升级

    《如龙0:誓约的场所 导演剪辑版》将于12月9日结束在Switch2平台的限时独占,正式登陆PC、PS5以及Xbox Series X|S等多个平台,目前各平台商店页面已上线。 与2015年最初发布的版本相比,导演剪辑版加入了全新的简体中文字幕与中文语音配音,并新增了部分剧情内容,例如李文海在复活赛…

    2026年9月22日 • 用户投稿
    300
  • 抖音如何长期稳定变现?普通人可持续运营的3种盈利模式

    抖音如何长期稳定变现?普通人可持续运营的3种盈利模式抖音如何长期稳定变现?普通人可持续运营的3种盈利模式抖音如何长期稳定变现?普通人可持续运营的3种盈利模式抖音如何长期稳定变现?普通人可持续运营的3种盈利模式

    抖音长期稳定变现的关键在于清晰的盈利模式和持续运营,普通人应找到适合自己的路径并长期坚持。1. 内容定位要垂直、更新稳定、实用有趣结合;2. 短视频带货需贴合账号调性,通过内容自然引导购买;3. 知识付费可通过免费干货建立信任后推出课程转化;4. 接广告合作要注重播放量、互动率与内容融合。 抖音长期…

    2026年9月22日 • 用户投稿
    600
  • 如何使用MLflow训练AI大模型?模型管理与跟踪的实用教程

    如何使用MLflow训练AI大模型?模型管理与跟踪的实用教程如何使用MLflow训练AI大模型?模型管理与跟踪的实用教程如何使用MLflow训练AI大模型?模型管理与跟踪的实用教程如何使用MLflow训练AI大模型?模型管理与跟踪的实用教程

    MLflow通过实验跟踪、可复现的项目封装、标准化模型格式和集中式模型注册表,实现大模型训练的全流程管理。它记录超参数、指标和模型文件,支持分布式环境下的集中日志管理,利用远程跟踪服务器和云存储统一收集数据,并通过模型版本控制与阶段管理提升团队协作与部署效率。 ☞☞☞AI 智能聊天, 问答助手, A…

    2026年9月22日 • 用户投稿
    000
  • Linux内核13-进程切换

    进程切换,也称为任务切换、上下文切换或任务调度,本文将探讨linux内核中进程切换的实现。我们首先理解几个关键概念。 1.1 硬件上下文 每个进程都有自己的地址空间,但所有进程共享CPU寄存器。因此,在恢复进程执行前,内核必须确保挂起时的寄存器值被重新加载到CPU寄存器中。 这些需要加载到CPU寄存…

    2026年9月22日
    200
  • PHP三元运算符复杂条件_PHP三元运算符多条件处理

    三元运算符可通过逻辑运算符或嵌套实现多条件判断,如链式写法 $result = ($a > 5 && $b == 90) ? ‘优秀’ : $score >= 80 ? ‘良好’ : $score >= 60 ? &#…

    2026年9月22日
    000
  • 一加Pro系列微信收款语音怎么开启?快速设置支付播报的方法

    首先检查微信内“收款小账本”开启语音播报功能,其次确保手机系统给予微信通知权限、关闭勿扰模式、媒体音量正常,并在电池设置中避免微信后台被限制,同时更新微信至最新版本;若需个性化,可通过系统通知渠道单独设置收款通知的声音与优先级,但无法更换播报音色;使用时注意公共场合隐私保护,务必核对屏幕金额以防误报…

    2026年9月22日
    100
  • 中国联通正式获得开展 eSIM 手机运营服务商用试验的批复

    感谢网友 会弹琴的九号、学士 的线索投递! 10月13日,三大运营商官方微信号相继发布消息,宣告eSIM服务进入新阶段。其中,中国联通于当日上午10:00率先发布推文《抢约!联通eSIM来了!》,动作迅速,展现出强烈的市场积极性;中国移动在傍晚19:29发布《中国移动全面上线eSIM手机办理》;而中…

    2026年9月22日
    200
  • 如何在抖音上打造个人IP并吸引精准粉丝实现流量变现?

    如何在抖音上打造个人IP并吸引精准粉丝实现流量变现?如何在抖音上打造个人IP并吸引精准粉丝实现流量变现?如何在抖音上打造个人IP并吸引精准粉丝实现流量变现?如何在抖音上打造个人IP并吸引精准粉丝实现流量变现?

    做抖音个人ip需内容定位清晰并持续输出价值。一、找准ip定位:专注细分领域如美妆测评或职场干货,分析同类账号优势,固定内容风格;二、制作“有用”或“有趣”的内容:前3秒抓人眼球,15~60秒提供实用技巧或情绪共鸣,设备简单但开头直接、字幕配音清晰;三、重视精准互动而非粉丝数:引导评论、发起话题、回复…

    2026年9月22日 • 用户投稿
    000
  • vivoS系列手机微信收款语音播报怎么设置?配置语音的详细方法

    开启微信收款语音播报需在微信“收付款”中启用“收款语音提醒”并授权麦克风权限;2. vivo手机需在设置中开启微信的自启动、后台运行、通知及麦克风权限以确保功能正常;3. 语音播报延迟或无声可能由网络、手机性能、微信版本、系统模式或第三方软件干扰导致;4. 除微信自带功能外,还可选用第三方收款App…

    2026年9月22日
    600
  • 微信注销无法通过验证怎么解决_微信注销验证失败处理方法

    验证失败需先核对实名信息,确保姓名身份证一致,并通过钱包功能检查或更正;随后切换稳定网络并清除微信缓存重试;若仍无法通过,使用原注册设备登录并尝试注销;同时解除所有第三方授权应用;最后联系微信客服提交身份证明材料等待审核处理。 如果您在尝试注销微信账号时遇到验证失败的问题,可能是由于身份信息不匹配、…

    2026年9月22日
    100
  • 谷歌浏览器窗口透明边框显示异常如何修复

    首先尝试修改快捷方式添加–disable-gpu –disable-software-rasterize参数,若可正常运行则关闭硬件加速,并重置chrome://flags实验功能及清除ShaderCache缓存文件。 谷歌浏览器出现窗口透明边框显示异常,通常和硬件加速或GP…

    2026年9月22日
    000
  • 抖音小店网页版怎么登录?抖音我的小店在哪里

    随着抖音电商平台的快速发展,越来越多的商家选择入驻该平台。作为商家运营的重要工具之一,抖音小店网页版为店铺管理带来了诸多便利。那么,如何正确登录抖音小店网页版?又该如何找到“我的小店”?下面将为您详细介绍。 一、为什么需要登录抖音小店网页版? 通过抖音小店网页版,商家可以高效地进行商品管理、订单处理…

    2026年9月22日
    000
  • Android自定义开关UI实现教程

    本文详细介绍了在Android应用中实现自定义开关UI的两种主要方法:一是通过集成第三方库如StickySwitch,快速实现美观且功能丰富的开关;二是通过结合Drawable XML和ToggleButton,实现高度定制化的开关外观。文章提供了详细的代码示例和配置说明,旨在帮助开发者灵活地创建符…

    2026年9月22日
    100
  • 如何用RunwayML导出AI生成的图片?高效保存图像的实用教程

    导出RunwayML生成的图片需先完成生成任务并进入详情视图,点击“下载”选择PNG或JPG等格式,推荐PNG以保留高质量细节;批量导出时使用多选功能统一设置分辨率和格式,提升效率;建议采用项目化文件夹结构与规范化命名规则管理海量图片,并利用标签、云同步辅助整理;后续应用中可结合Photoshop、…

    2026年9月22日
    100
  • 为什么不应该在多个网站重复使用同一个密码,撞库攻击的原理是什么?

    撞库攻击利用用户重复使用密码的习惯,黑客通过泄露的账号密码批量尝试登录其他网站,一旦某个小网站密码泄露,相同密码的高价值账户也可能被攻破,因此每个网站应使用独立复杂密码并开启双重验证以提升安全。 不建议在多个网站用同一个密码,核心原因就是防范“撞库攻击”。这种攻击利用了用户重复使用密码的习惯,让黑客…

    2026年9月22日
    700
  • iPhone情侣模式如何设置情侣专属密码?保护隐私的设置技巧

    iPhone情侣模式通过共享日历、照片、位置等功能增进亲密关系,同时利用屏幕使用时间密码、App锁等保护隐私;核心是坦诚沟通,明确共享与隐私边界,避免变为监视模式;结束时应妥善取消共享并尊重对方感受。 iPhone情侣模式,其实就是通过一些设置,让情侣之间既能共享一些信息,又能保护各自的隐私。核心在…

    2026年9月22日
    400
  • 在Java中如何对集合进行分区处理

    Java中集合分区是将大集合拆分为小集合,适用于并行处理、分页等场景;2. 可使用Guava库的Lists.partition()快速实现,但返回的是原列表视图,修改会影响原数据;3. 也可用Java 8 Stream结合IntStream和Collectors自定义分区,灵活性高;4. 按条件分区…

    2026年9月22日
    300

发表回复

登录后才能评论
关注微信