责任链模式是一种行为型设计模式,允许一个对象将请求沿着一个处理器链传递,直到请求被处理或者到达链的末尾。链中的每个处理器都有能力处理请求或将其传递给链中的下一个处理器。
以下是在Go语言中实现责任链模式的基本示例:
package main
import "fmt"
// Request 表示需要处理的请求
type Request struct {
amount int
}
// Handler 定义处理请求的接口
type Handler interface {
SetNext(handler Handler)
Handle(request Request)
}
// ConcreteHandler 具体的处理器实现
type ConcreteHandler struct {
nextHandler Handler
}
func (h *ConcreteHandler) SetNext(handler Handler) {
h.nextHandler = handler
}
func (h *ConcreteHandler) Handle(request Request) {
// 处理请求的逻辑
if request.amount <= 100 {
fmt.Println("Request handled by ConcreteHandler")
} else if h.nextHandler != nil {
// 将请求传递给下一个处理器
h.nextHandler.Handle(request)
}
}
func main() {
// 创建处理器实例
handler1 := &ConcreteHandler{
}
handler2 := &ConcreteHandler{
}
// 设置处理器的下一个处理器
handler1.SetNext(handler2)
// 创建请求
request := Request{
amount: 50}
// 处理请求
handler1.Handle(request)
}
在上面的示例中,我们定义了一个处理器接口 Handler
,以及具体的处理器实现 ConcreteHandler
。每个处理器都能够处理请求或将其传递给下一个处理器。在 main
函数中,我们创建了两个具体的处理器实例,并将它们链接起来形成一个处理器链。然后,我们创建一个请求并将其传递给链的第一个处理器,该请求会沿着链传递直到被处理或到达链的末尾。