责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过一条链传递请求,直到某个对象处理该请求为止。在责任链模式中,每个处理者都包含对下一个处理者的引用,形成一条链。请求沿着链传递,直到有一个处理者能够处理它为止。
考虑一个简单的购买审批的例子,假设有三个处理者:主管、经理和总经理。每个处理者有不同的审批权限,请求需要从主管开始,经过经理,最终到总经理。
package main
import "fmt"
// Handler Interface
type Approver interface {
HandleRequest(request int)
SetSuccessor(successor Approver)
}
// ConcreteHandler
type Supervisor struct {
successor Approver
}
func (s *Supervisor) HandleRequest(request int) {
if request <= 100 {
fmt.Println("Supervisor approves the request.")
} else if s.successor != nil {
s.successor.HandleRequest(request)
}
}
func (s *Supervisor) SetSuccessor(successor Approver) {
s.successor = successor
}
// ConcreteHandler
type Manager struct {
successor Approver
}
func (m *Manager) HandleRequest(request int) {
if request <= 500 {
fmt.Println("Manager approves the request.")
} else if m.successor != nil {
m.successor.HandleRequest(request)
}
}
func (m *Manager) SetSuccessor(successor Approver) {
m.successor = successor
}
// ConcreteHandler
type GeneralManager struct{}
func (gm *GeneralManager) HandleRequest(request int) {
if request > 500 {
fmt.Println("General Manager approves the request.")
} else {
fmt.Println("Request cannot be approved.")
}
}
// Client
func main() {
supervisor := &Supervisor{}
manager := &Manager{}
generalManager := &GeneralManager{}
supervisor.SetSuccessor(manager)
manager.SetSuccessor(generalManager)
// Example requests
supervisor.HandleRequest(50)
supervisor.HandleRequest(200)
supervisor.HandleRequest(1000)
}在这个示例中,Approver是处理者接口,而Supervisor、Manager和GeneralManager是具体的处理者。每个处理者都实现了处理请求的方法,并且包含了对下一个处理者的引用。客户端创建一个责任链,将请求从主管传递到总经理,根据请求的金额进行不同级别的审批。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。