工厂方法模式在Golang中通过接口定义产品(PaymentProcessor)和工厂(PaymentFactory),各具体产品(WechatPay等)实现产品接口,各具体工厂(WechatFactory等)实现工厂接口,使用方仅依赖接口,新增产品只需添加新结构体和工厂,无需修改原有代码,符合开闭原则。
用 Golang 实现工厂方法模式(Factory Method),核心是把“创建对象”的逻辑从具体业务中抽离,交给子类(或具体工厂)决定。它不直接 new 产品,而是通过一个统一接口返回产品实例,让新增产品时只需增加新工厂和新产品,无需修改原有代码 —— 符合开闭原则。
所有产品需实现同一接口,确保调用方能统一处理:
type PaymentProcessor interface {
Process(amount float64) string
}
这是抽象层,后续的微信、支付宝、银行卡等支付方式都实现它。
每个具体产品独立实现接口,互不影响:
例如:
type WechatPay struct{}
func (w WechatPay) Process(amount float64) string {
return "WeChat Pay processed ¥" + fmt.Sprintf("%.2f", amount)
}
定义创建产品的抽象方法,由具体工厂实现:
type PaymentFactory interface {
CreateProcessor() PaymentProcessor
}
注意:这里不传参、不判断类型,只专注“生成一个”,把决策权交给具体工厂。
每种产品对应一个工厂,各自负责构造自己的实例:
示例:
type WechatFactory struct{}
func (w WechatFactory) CreateProcessor() PaymentProcessor {
return WechatPay{}
}
业务代码完全不知道具体类型,只和接口打交道:
func Pay(factory PaymentFactory, amount float64) string {
processor := factory.CreateProcessor()
return processor.Process(amount)
}
// 新增支付方式?只需加新结构体 + 新工厂,调用侧一行都不用改
fmt.Println(Pay(WechatFactory{}, 100.5)) // WeChat Pay processed ¥100.50
fmt.Println(Pay(AlipayFactory{}, 200.0)) // Alipay processed ¥200.00
要加 Apple Pay?写 ApplePay 和 ApplePayFactory 即可,原 Pay() 函数照常运行。
基本上就这些。Golang 没有继承语法,但靠接口组合+结构体嵌入,一样能清晰表达工厂方法的意图 —— 解耦创建与使用
,让扩展变得轻量自然。
# go
# golang
# 支付宝
# 微信
# app
# 微信支付
# apple
# 子类
# 结构体
# 继承
# 接口
# Interface
# 对象
# 只需
# 支付方式
# 各具
# 自己的
# 这是
# 开闭
# 它不
# 不传
相关文章:
b2c电商网站制作流程,b2c水平综合的电商平台?
建站之星安装模板失败:服务器环境不兼容?
建站之星24小时客服电话如何获取?
如何快速搭建高效可靠的建站解决方案?
宝塔新建站点报错如何解决?
完全自定义免费建站平台:主题模板在线生成一站式服务
javascript基本数据类型及类型检测常用方法小结
建站之星如何实现网站加密操作?
nginx修改上传文件大小限制的方法
相册网站制作软件,图片上的网址怎么复制?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何在IIS中新建站点并配置端口与物理路径?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
再谈Python中的字符串与字符编码(推荐)
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
定制建站流程解析:需求评估与SEO优化功能开发指南
佛山企业网站制作公司有哪些,沟通100网上服务官网?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
常州自助建站工具推荐:低成本搭建与模板选择技巧
家庭服务器如何搭建个人网站?
北京网站制作的公司有哪些,北京白云观官方网站?
网站按钮制作软件,如何实现网页中按钮的自动点击?
北京制作网站的公司,北京铁路集团官方网站?
北京网站制作公司哪家好一点,北京租房网站有哪些?
广东企业建站网站优化与SEO营销核心策略指南
在线制作视频网站免费,都有哪些好的动漫网站?
建站之星如何修改网站生成路径?
建站之星安装后界面空白如何解决?
如何快速搭建二级域名独立网站?
如何快速搭建虚拟主机网站?新手必看指南
深入理解Android中的xmlns:tools属性
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
油猴 教程,油猴搜脚本为什么会网页无法显示?
建站三合一如何选?哪家性价比更高?
开源网站制作软件,开源网站什么意思?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何彻底删除建站之星生成的Banner?
如何在云主机上快速搭建网站?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
高端建站如何打造兼具美学与转化的品牌官网?
建站VPS选购需注意哪些关键参数?
建站之星后台密码遗忘?如何快速找回?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
广州商城建站系统开发成本与周期如何控制?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
*请认真填写需求信息,我们会在24小时内与您取得联系。