在Go语言中,可以使用接口和结构体来实现职责链模式。
首先,我们需要定义一个接口,该接口定义了处理请求的方法:
type Handler interface {
SetNext(handler Handler)
HandleRequest(request string)
}
然后,我们可以实现一个具体的处理器结构体,该结构体实现了Handler接口:
type ConcreteHandler struct {
nextHandler Handler
}
func (ch *ConcreteHandler) SetNext(handler Handler) {
ch.nextHandler = handler
}
func (ch *ConcreteHandler) HandleRequest(request string) {
// 处理请求的逻辑
if request == "some condition" {
// 处理请求的代码
} else if ch.nextHandler != nil {
// 将请求传递给下一个处理器
ch.nextHandler.HandleRequest(request)
}
}
最后,我们可以创建一个处理器链,将请求传递给第一个处理器:
func main() {
handler1 := &ConcreteHandler{}
handler2 := &ConcreteHandler{}
handler3 := &ConcreteHandler{}
handler1.SetNext(handler2)
handler2.SetNext(handler3)
handler1.HandleRequest("some request")
}
这样,当调用handler1的HandleRequest方法时,如果满足某个条件,就会处理请求;否则,会将请求传递给下一个处理器,直到有一个处理器能够处理请求为止。