设计模式——职责链模式

2020-11-01  本文已影响0人  DevilRoshan

什么是职责链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

实现

type Handler interface {
    Handler(handlerID int) string
}

type handler struct {
    name      string
    next      Handler
    handlerID int
}

func NewHandler(name string, next Handler, handlerID int) *handler {
    return &handler{
        name:      name,
        next:      next,
        handlerID: handlerID,
    }
}

func (this *handler)Handler(handlerID int) string {
    if this.handlerID == handlerID {
        return this.name + " handled " + strconv.Itoa(handlerID)
    }
    return this.next.Handler(handlerID)
}
func TestNewHandler(t *testing.T) {
    yang := NewHandler("laoyang", nil, 1)
    chuan := NewHandler("laochuang", yang, 2)
    res := yang.Handler(1)
    fmt.Println(res)
    res = chuan.Handler(1)
    fmt.Println(res)
}
// === RUN   TestNewHandler
// laoyang handled 1
// laoyang handled 1
// --- PASS: TestNewHandler (0.00s)
//PASS

优点

缺点

使用场景

注意

上一篇 下一篇

猜你喜欢

热点阅读