职责链
让请求沿处理链依次传递。
行为型
说明
每个处理器决定是否处理或继续传递,适合可组合的校验流程。
分析
Chain 把两个处理函数连接起来:前一个返回 true 后,后一个才执行。多个校验规则可以按顺序组合,且短路行为避免不必要的后续工作。
短路决定哪些规则真正执行。42 通过正数检查才检查上界;-2 在第一步失败,后续函数不会运行。因此不要把必须执行的审计或资源释放放在可能被短路的处理器中。这里是所有校验都须通过的链;另一类职责链会在某个处理器接管请求后停止,两者不能混用。
查看图表代码
适用前提与边界
若处理器会修改请求,应把执行顺序和错误传播方式定义清楚。 交互流程很短且稳定时,直接调用通常更容易理解。
示例输入与调用
go
valid := Chain(Positive, func(n int) bool { return n < 100 })
fmt.Println(valid(42), valid(-2))运行输出
text
true false完整 Go 示例
go
package main
import "fmt"
type Handler func(int) bool
func Chain(first, next Handler) Handler {
return func(n int) bool { return first(n) && next(n) }
}
func Positive(n int) bool {
return n > 0
}
func main() {
valid := Chain(Positive, func(n int) bool { return n < 100 })
fmt.Println(valid(42), valid(-2))
}继续阅读
- 设计意图与对象责任
- 设计意图与对象责任
- 设计意图与对象责任