责任链模式

类似一个单向链表,所有责任相关的人按照责任层级关系绑定到该链表上

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


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注