请提供一段完整的责任链模式Golang代码
时间: 2024-02-18 16:02:19 浏览: 24
好的,以下是一个基于责任链模式的Golang代码示例:
```go
package main
import "fmt"
// 定义处理请求的接口
type Handler interface {
handle(request string) string
setNext(handler Handler)
}
// 实现Handler接口的基本处理器
type BaseHandler struct {
nextHandler Handler
}
func (handler *BaseHandler) handle(request string) string {
if handler.nextHandler != nil {
return handler.nextHandler.handle(request)
}
return "处理完毕"
}
func (handler *BaseHandler) setNext(handler Handler) {
handler.nextHandler = handler
}
// 具体的处理器1
type ConcreteHandler1 struct {
BaseHandler
}
func (handler *ConcreteHandler1) handle(request string) string {
if request == "request1" {
return "处理器1处理请求1"
}
return handler.BaseHandler.handle(request)
}
// 具体的处理器2
type ConcreteHandler2 struct {
BaseHandler
}
func (handler *ConcreteHandler2) handle(request string) string {
if request == "request2" {
return "处理器2处理请求2"
}
return handler.BaseHandler.handle(request)
}
func main() {
// 创建责任链
handler1 := &ConcreteHandler1{}
handler2 := &ConcreteHandler2{}
handler1.setNext(handler2)
// 处理请求
result1 := handler1.handle("request1")
fmt.Println(result1)
result2 := handler1.handle("request2")
fmt.Println(result2)
result3 := handler1.handle("request3")
fmt.Println(result3)
}
```
在上面的代码中,我们定义了一个Handler接口,其中包含处理请求的方法handle和设置下一个处理器的方法setNext。
然后我们实现了一个BaseHandler基本处理器,它包含一个nextHandler成员变量,用于存储下一个处理器。实现了Handler接口的具体处理器ConcreteHandler1和ConcreteHandler2分别处理请求1和请求2,如果无法处理则交给BaseHandler处理。
最后我们创建了一个责任链,将handler1设置为第一个处理器,handler2设置为handler1的下一个处理器。然后我们调用handler1的handle方法传入不同的请求,看看它们是如何被处理的。