k8s visitor
这是一种将算法和数据结构分离的编程模式。
type Visitor func(shap Shap)
type Shap interface{
Accept(Visitor)
}
我们创造一个函数类型,它接受一个接口作为参数。
我们定义刚才那个接口,并且在接口中我们定义一个函数,这个函数中的参数是刚才的函数类型。
type result1 struct {
data int
}
func(r result1) Accept(v Visitor) {
v(r)
}
type result2 struct {
data int
name string
}
func(r result2) Accept(v Visitor) {
v(r)
}
我们实现了两个 struct。
接下来,我们定义一些函数,这些函数是 visitor 函数。
func n1(shap Shap) {
fmt.Println(shap)
}
func n2(shap Shap) {
fmt.Println(shap)
}
接下来我们在 mian 函数中调用这个 visitor 函数。
func main(){
r1 := result1{1}
r2 := result2{2, "shgopher"}
result := []Shap{r1, r2}
for _, v := range result {
v.Accept(n1)
v.Accept(n2)
}
}
数据是 r1,和 r2,算法是 n1 和 n2,这样,我们就可以将算法和数据给分开,互相不会有耦合。