建造者模式适合分步构建复杂配置对象,通过隐藏内部结构、链式设置字段、Build阶段校验封装及预设配置支持,确保安全、清晰与可复用。

建造者模式特别适合分步构建复杂配置对象——尤其是当配置项多、有可选字段、存在依赖关系或需要运行时校验时。它把“怎么建”和“建什么”分开,让配置过程清晰、安全、可复用。
明确配置对象结构,隐藏直接初始化
先定义不可导出(小写首字母)的目标配置结构体,禁止外部直接 new 或字面量赋值。例如 HTTP 客户端配置:
type httpClientConfig struct {timeout time.Duration
maxRetries int
caCertPath string
proxyURL string
disableKeepAlive bool
}
这样能强制走建造者流程,确保默认值、约束和一致性由 Builder 统一管控。
设计链式 Builder 结构,每步返回自身
创建一个 Builder 类型,内部持有配置对象指针,并为每个可配字段提供 WithXXX 方法:
- 每个方法接收参数,做基础校验(如 timeout > 0、maxRetries ≥ 0)
- 更新内部 config 字段
- 返回 *Builder,支持连续调用,比如
builder.WithTimeout(10 * time.Second).WithRetry(5).WithCACert("/cert.pem")
在 Build 阶段集中校验与封装
Build 方法不是简单返回 config,而是执行最终检查并生成不可变的使用对象:
- 验证逻辑耦合性:例如若 caCertPath 非空,但文件不存在,则返回 error
- 补全隐含规则:如未设 proxyURL 但启用了认证,自动禁用代理相关逻辑
- 返回真正可用的对象(如 *http.Client),而非裸结构体,实现封装与解耦
按需支持多套预设配置或扩展变体
可通过不同 Builder 实现或工厂函数快速生成常见配置:
- 提供
NewProductionClientBuilder()和NewTestClientBuilder(),预设超时、重试、证书等差异 - 允许用户在预设基础上再调用 WithXXX 覆盖个别项,兼顾约定优于配置与灵活性
- 多个具体 Builder(如 JSONBuilder / XMLBuilder)可共用同一构建流程,产出不同格式的配置对象


















