Skip to content
← 返回设计模式列表
设计意图与对象责任

建造者 ​

逐步组装复杂对象。

创建型

说明 ​

可选字段很多且组合有约束时,用构建过程表达设置顺序。

分析 ​

构建器把可选设置收集到内部对象中,最后一次性返回结果。链式方法让调用处清楚看到 URL、方法等设置过程,还可以在 Build 时检查必填项或组合约束。

URL 与 Method 修改同一个构建器并返回它,Build 按值返回 Request;本例没有校验,也没有设置 Timeout。空 URL 仍可构建成功,链式调用不等于合法性检查。需要完整对象不变量时,应在 Build 集中检查并返回错误;含切片或指针时还需决定结果是否与构建器共享内存。

查看图表代码

适用前提与边界 ​

字段很少且没有校验时,直接使用结构体字面量更符合 Go 的习惯。 创建过程没有复用或选择需求时,直接构造通常更清楚。

示例输入与调用 ​

go
request := new(RequestBuilder).URL("https://example.com").Method("GET").Build()
	fmt.Println(request.URL, request.Method)

运行输出 ​

text
https://example.com GET

完整 Go 示例 ​

go
package main

import "fmt"

type Request struct {
	URL, Method string
	Timeout     int
}
type RequestBuilder struct{ value Request }

func (b *RequestBuilder) URL(s string) *RequestBuilder {
	b.value.URL = s
	return b
}
func (b *RequestBuilder) Method(s string) *RequestBuilder {
	b.value.Method = s
	return b
}
func (b *RequestBuilder) Build() Request {
	return b.value
}

func main() {
	request := new(RequestBuilder).URL("https://example.com").Method("GET").Build()
	fmt.Println(request.URL, request.Method)
}

继续阅读