建造者
逐步组装复杂对象。
创建型
说明
可选字段很多且组合有约束时,用构建过程表达设置顺序。
分析
构建器把可选设置收集到内部对象中,最后一次性返回结果。链式方法让调用处清楚看到 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)
}继续阅读
- 设计意图与对象责任
- 设计意图与对象责任
- 设计意图与对象责任