码迷,mamicode.com
首页 > 其他好文 > 详细

golang的责任链与链式调用

时间:2021-03-06 14:47:05      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:复用   return   roo   nil   handle   执行顺序   做事   str   next   

先给出接口

type Handler interface {
	do()
	SetNext(handler Handler) Handler
	Run()
}

// 用以复用
type Next struct {
	nextHandler Handler
}

func (n *Next) SetNext(handler Handler) Handler {
	n.nextHandler = handler
	return handler
}

func (n *Next) Run() {
	if n.nextHandler != nil {
		n.nextHandler.do()
		n.nextHandler.Run()
	}
}

具体处理的实例

// RootHandler do nothing
type RootHandler struct {
	Next
}

// 根结点不做事
func (h RootHandler) do()  {
	// do nothing
}

type OneHandler struct {
	Next
}

func (o OneHandler) do() {
	fmt.Println("handler one do something")
}

type TwoHandler struct {
	Next
}

func (o TwoHandler) do() {
	fmt.Println("handler two do something")
}

使用

root := &RootHandler{}
// 执行顺序一目了然
	root.SetNext(&TwoHandler{}).
		SetNext(&OneHandler{})

	root.Run()

golang的责任链与链式调用

标签:复用   return   roo   nil   handle   执行顺序   做事   str   next   

原文地址:https://www.cnblogs.com/asketch/p/14488965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!