职责链模式

59 阅读1分钟

定义 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。

在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过 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()
}