Golang中“建造者+工厂”组合模式将创建逻辑分层:工厂决定类型并返回建造者,建造者链式配置后Build()生成对象,适用于HTTP客户端等复杂初始化场景。
用 Golang 实现“建造者 + 工厂”组合模式,核心是把对象的构造逻辑分层:工厂负责决定创建哪一类对象,建造者负责按需组装复杂结构。这种方式特别适合配置项多、变体多、初始化步骤繁琐的场景(比如 HTTP 客户端、数据库连接池、消息生产者等)。
工厂不直接 new 结构体,而是返回一个建造者实例;建造者提供链式方法设置字段,最后调用 Build() 得到最终对象。这样既解耦了创建逻辑,又避免了构造函数参数爆炸。
例如要支持多种日志输出器(ConsoleLogger、FileLogger、RemoteLogger),每种又有不同配置(级别、格式、缓冲区大小等):
type Logger interface { Log(msg string) }
ConsoleLoggerBuilder),含私有字段和链式设置方法(WithLevel(), WithFormat())func NewLoggerBuilder(kind string) LoggerBuilder
若多个类型构造流程相似(比如都有 name、timeout、retry),可抽象出泛型建造者基类:
type Builder[T any] interface {
Build() T
}
type GenericBuilder[T any] struct {
value T
}
func (b GenericBuilder[T]) SetField(field func(T) T) GenericBuilder[T] {
b.value = field(b.value)
return b
}
再为具体类型嵌入该结构,复用通用设置逻辑,同时保留类型安全。
建造者应是**不可变设计**:每次设置都返回新实例,或确保内部状态不会被外部意外修改(如深拷贝切片、避免暴露指针字段)。工厂返回的建造者也应是值类型或带副本语义,防止并发下状态污染。
Build() 前字段可被随意读取)Build() 中做必要校验(如必填字段是否为空),失败时 panic 或返回 error(推荐后者)NewHTTPClientBuilder() 比 NewBuilder() 更清晰使用者无需关心内部结构,只管“选类型 → 配置 → 构建”:
logger := NewLoggerBuilder("file").
WithLevel("deb
ug").
WithFilePath("/var/log/app.log").
WithBufferSize(4096).
Build()
client := NewHTTPClientBuilder().
WithTimeout(30 * time.Second).
WithRetry(3).
WithMiddleware(AuthMiddleware, TraceMiddleware).
Build()
这种写法语义明确、易扩展、测试友好——每个建造者可单独单元测试,工厂可轻松新增类型而不改调用方代码。
# go
# golang
# app
# String
# 构造函数
# Error
# 结构体
# 指针
# 接口
# 值类型
# Interface
# 泛型
# 切片
# 并发
# 对象
# 数据库
# kind
# http
# 链式
# 应是
# 复用
# 客户端
# 都有
# 多个
# 又有
# 适用于
# 不改
# 者也
相关文章:
Android滚轮选择时间控件使用详解
h5在线制作网站电脑版下载,h5网页制作软件?
如何在Golang中指定模块版本_使用go.mod控制版本号
建站主机选购指南与交易推荐:核心配置解析
建站VPS选购需注意哪些关键参数?
建站之星2.7模板:企业网站建设与h5定制设计专题
网站制作壁纸教程视频,电脑壁纸网站?
淘宝制作网站有哪些,淘宝网官网主页?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
常州企业网站制作公司,全国继续教育网怎么登录?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
专业网站建设制作报价,网页设计制作要考什么证?
如何快速生成高效建站系统源代码?
建站之星如何一键生成手机站?
简单实现Android验证码
如何选择高性价比服务器搭建个人网站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
高端建站三要素:定制模板、企业官网与响应式设计优化
C#如何使用XPathNavigator高效查询XML
如何快速打造个性化非模板自助建站?
如何在IIS管理器中快速创建并配置网站?
韩国服务器如何优化跨境访问实现高效连接?
如何通过可视化优化提升建站效果?
已有域名和空间如何搭建网站?
如何通过二级域名建站提升品牌影响力?
宝塔建站无法访问?如何排查配置与端口问题?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何挑选高效建站主机与优质域名?
Thinkphp 中 distinct 的用法解析
北京网站制作的公司有哪些,北京白云观官方网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
完全自定义免费建站平台:主题模板在线生成一站式服务
北京制作网站的公司,北京铁路集团官方网站?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何选择可靠的免备案建站服务器?
网站图片在线制作软件,怎么在图片上做链接?
如何快速搭建高效WAP手机网站吸引移动用户?
个人摄影网站制作流程,摄影爱好者都去什么网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
已有域名如何快速搭建专属网站?
建站之星后台密码遗忘或太弱?如何重置与强化?
宝塔建站助手安装配置与建站模板使用全流程解析
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
*请认真填写需求信息,我们会在24小时内与您取得联系。