关于设计模式:设计模式责任链ResponsibilityChain模式

模式定义

使多个对象都有机会解决申请,从而防止申请的发送者和接受者之间耦合关系,将这些对象连成一条链,并沿着这条链传递申请,直到有一个对象解决它为止

类图

要点总结

  • Chain of Responsibility模式的利用场合在于“一个申请可能有多个接受者,然而最初真正的接受者只有一个”,这时候申请发送者与接受者的耦合有可能呈现“变动软弱”的症状,职责链的目标就是将二者解耦,从而更好地应答变动
  • 利用了Chain of Responsibility模式后,对象的职责调配将更具灵活性,咱们能够在运行时动静增加、批改申请的解决职责
  • 如果申请传递到职责链的开端任得不到解决,应该有一个正当的缺省机制,这也是每一个接受者对象的责任,而不是发出请求的对象的责任

Go语言代码实现

工程目录

responsibility_chain.go

package Responsibility_Chain

import "strconv"

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 (h *handler) Handler(handlerID int) string{
   if h.handlerID == handlerID{
      return h.name + " handled " + strconv.Itoa(handlerID)
   }
   return h.next.Handler(handlerID)
}

responsibility_chain_test.go

package Responsibility_Chain

import (
   "fmt"
   "testing"
)

func TestNewHandler(t *testing.T) {
   wang := NewHandler("laowang", nil, 1)
   zhang := NewHandler("lanzhang", wang, 2)


   r := wang.Handler(1)
   fmt.Println(r)

   r = zhang.Handler(2)
   fmt.Println(r)
}

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据