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

职责链 ​

让请求沿处理链依次传递。

行为型

说明 ​

每个处理器决定是否处理或继续传递,适合可组合的校验流程。

分析 ​

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))
}

继续阅读