定义 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。
golang 实现如下
type IHandler interface {
Handle() bool
}
type AHandler struct {
}
func (a *AHandler) Handle() bool {
fmt.Println("AHandler")
return true
}
type BHandler struct {
}
func (b *BHandler) Handle() bool {
fmt.Println("BHandler")
return true
}
type HandlerChain struct {
handlers []IHandler
}
func (h *HandlerChain) AddHandler(i IHandler) {
if h.handlers == nil {
h.handlers = make([]IHandler, 0)
}
h.handlers = append(h.handlers, i)
}
func (h *HandlerChain) Handle() bool {
for _, v := range h.handlers {
if !v.Handle() {
return false //如果设计的是有不满足要求的就返回 如果需要全部遍历一遍,这里就不返回
}
}
return true
}
func TestChain() {
c := new(HandlerChain)
c.AddHandler(new(AHandler))
c.AddHandler(new(BHandler))
c.Handle()
}