类似一个单向链表,所有责任相关的人按照责任层级关系绑定到该链表上
package main
// 类似一个单向链表表
// 所有责任相关的人按照责任层级关系绑定到该链表上
// 可以根据责任标识handlerId来查找到责任人
import "fmt"
type Chain interface {
Handler(handlerId int) string
}
type node struct {
name string
parent Chain
handlerId int
}
func NewChain(name string, parent Chain, handlerId int) Chain {
return &node{
name: name,
parent: parent,
handlerId: handlerId,
}
}
func (h *node) Handler(handlerId int) string {
if h.handlerId == handlerId {
return fmt.Sprintf("%s handled %d", h.name, handlerId)
}
return h.parent.Handler(handlerId)
}
func main() {
a := NewChain("a", nil, 1)
b := NewChain("b", a, 2)
c := NewChain("c", b, 3)
d := NewChain("d", c, 4)
fmt.Println(d.Handler(2))
}
发表回复