
在Go语言中,虽然没有类和构造函数的概念,但通过结构体和函数的组合,可以灵活实现工厂模式。工厂模式的核心价值在于解耦对象的创建与使用,特别适合需要根据条件创建不同实例的场景。Golang中的工厂模式常用于隐藏复杂初始化逻辑、统一管理对象生成过程。
简单工厂模式
简单工厂模式通过一个独立的函数来决定创建哪种类型的对象。适用于类型变化不频繁的场景。
例如,定义一个支付接口和多种支付方式:
type Payment interface { Pay()}type Alipay struct{}func (a *Alipay) Pay() { fmt.Println("使用支付宝支付")}type WechatPay struct{}func (w *WechatPay) Pay() { fmt.Println("使用微信支付")}
创建一个工厂函数,根据传入参数返回对应的支付实例:
func NewPayment(method string) Payment { switch method { case "alipay": return &Alipay{} case "wechat": return &WechatPay{} default: panic("不支持的支付方式") }}
调用时只需关注接口,无需了解具体实现:
立即学习“go语言免费学习笔记(深入)”;
pay := NewPayment(“alipay”)
pay.Pay()
抽象工厂模式
当需要创建一组相关或依赖对象时,抽象工厂更合适。比如不同风格的UI组件库(按钮、文本框等)。
先定义组件接口:
type Button interface { Click()}type ThemeFactory interface { CreateButton() Button}
实现深色主题和浅色主题:
type DarkButton struct{}func (d *DarkButton) Click() { fmt.Println("深色按钮被点击")}type DarkThemeFactory struct{}func (d *DarkThemeFactory) CreateButton() Button { return &DarkButton{}}
工厂函数返回具体工厂实例:
func NewThemeFactory(theme string) ThemeFactory { switch theme { case "dark": return &DarkThemeFactory{} case "light": return &LightThemeFactory{} default: panic("未知主题") }}
使用者通过工厂获取组件,完全隔离主题细节:
factory := NewThemeFactory(“dark”)
btn := factory.CreateButton()
btn.Click()
私有结构体与包级封装
Go语言中可通过首字母小写将结构体设为私有,仅暴露工厂函数,强制用户通过工厂创建实例。这在需要控制初始化逻辑时非常有用。
例如数据库连接池:
type database struct { connString string maxConn int}func NewDatabase(conn string) *database { if conn == "" { panic("连接字符串不能为空") } return &database{ connString: conn, maxConn: 10, }}
外部包无法直接初始化 database,只能调用 NewDatabase,确保了配置合法性。
基本上就这些。工厂模式在Golang中更多体现为一种设计思想,结合接口和函数即可轻量实现,关键是把对象创建的“决策”集中管理,提升代码可维护性。
以上就是Golang工厂模式创建对象实践的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1408398.html
微信扫一扫
支付宝扫一扫