chiachan
chiachan
Published on 2020-08-30 / 649 Visits
0

Visitor模式(访问者模式)

什么是访问者模式?

  • 访问者模式即访问数据结构并处理数据

示范代码(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"))
}