责任链模式
为请求创建一个对象链,每个对象依次处理请求并传给链中的下一个对象。
责任链中每个对象都拥有同一个父类(或接口)。
package main
import (
"fmt"
"strings"
)
type Handler interface {
Handle(content string)
next(handler Handler, content string)
}
// 广告过滤
type AdHandler struct {
handler Handler
}
func (ad *AdHandler) Handle(content string) {
fmt.Println("执行广告过滤。。。")
newContent := strings.Replace(content, "广告", "**", 1)
fmt.Println(newContent)
ad.next(ad.handler, newContent)
}
func (ad *AdHandler) next(handler Handler, content string) {
if ad.handler != nil {
ad.handler.Handle(content)
}
}
// 敏感词过滤
type SensitiveHandler struct {
handler Handler
}
func (sensitive *SensitiveHandler) Handle(content string) {
fmt.Println("执行敏感词过滤。。。")
newContent := strings.Replace(content, "敏感词", "***", 1)
fmt.Println(newContent)
sensitive.next(sensitive.handler, newContent)
}
func (sensitive *SensitiveHandler) next(handler Handler, content string) {
if sensitive.handler != nil {
sensitive.handler.Handle(content)
}
}
func main() {
adHandler := &AdHandler{}
sensitiveHandler := &SensitiveHandler{}
adHandler.handler = sensitiveHandler
str := "我是正常内容,我是广告,我是敏感词,我是正常内容"
fmt.Println(str)
adHandler.Handle(str)
}
输出结果
我是正常内容,我是广告,我是敏感词,我是正常内容
执行广告过滤。。。
我是正常内容,我是**,我是敏感词,我是正常内容
执行敏感词过滤。。。
我是正常内容,我是**,我是***,我是正常内容
参考资料