什么是访问者模式?
- 访问者模式即访问数据结构并处理数据
示范代码(visitor.go)
元素接受不同访问者访问
package Visitor
import "fmt"
// 访问者
type Visitor interface {
visit()
}
type UserVisitor struct {
name string
}
func NewUserVisitor(name string) *UserVisitor {
return &UserVisitor{name: name}
}
func (v *UserVisitor) visit() {
fmt.Printf("用户%s前来访问", v.name)
}
type AdminVisitor struct {
name string
}
func NewAdminVisitor(name string) *AdminVisitor {
return &AdminVisitor{name: name}
}
func (v *AdminVisitor) visit() {
fmt.Printf("管理员%s前来访问", v.name)
}
// 被访问元素
type Element interface {
accept(visitor Visitor)
}
type ConreteElement struct {
}
func (e *ConreteElement) accept(visitor Visitor) {
visitor.visit()
fmt.Println()
}
测试用例(visitor_test.go)
package Visitor
import "testing"
func TestElement_accept(t *testing.T) {
e := new(ConreteElement)
e.accept(NewUserVisitor("user1"))
e.accept(NewAdminVisitor("admin1"))
}