模板方法
固定流程,允许替换其中的步骤。
行为型
说明
Go 通常用组合和函数参数表达步骤,而不是依赖继承。
分析
Process 固定“校验后保存”的顺序,validate 与 save 则由调用方提供。Go 没有类继承体系,函数参数或接口组合更自然地表达可替换步骤。
模板拥有顺序,步骤提供实现:校验失败立即返回 false,保存函数不会被调用。传入的函数必须非 nil。示例 save 没有返回错误,因此 true 只表示校验通过且 save 已返回,不证明真实存储成功;需要持久化时应把保存失败纳入返回契约。
查看图表代码
适用前提与边界
流程的固定部分必须稳定,否则频繁增加钩子会让模板难以理解。 交互流程很短且稳定时,直接调用通常更容易理解。
示例输入与调用
go
ok := Process("report", func(s string) bool { return s != "" }, func(s string) { fmt.Println("saved:", s) })
fmt.Println(ok)运行输出
text
saved: report
true完整 Go 示例
go
package main
import "fmt"
func Process(input string, validate func(string) bool, save func(string)) bool {
if !validate(input) {
return false
}
save(input)
return true
}
func main() {
ok := Process("report", func(s string) bool { return s != "" }, func(s string) { fmt.Println("saved:", s) })
fmt.Println(ok)
}继续阅读
- 设计意图与对象责任
- 设计意图与对象责任
- 设计意图与对象责任