golang的責任鏈與鏈式調用


先給出接口

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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM