Visitor模式

visitor模式在k8s源代码里面比较场景,刚接触,理解起来有点绕,体会其本质后,发现就是callback的一种实现

示例代码

type Callback func()type Visitor interface {Visit(callback Callback)
}type A struct {visitor Visitor
}func (a *A) Visit(callback Callback) {fmt.Println("start execute A")a.visitor.Visit(callback)fmt.Println("finish execute A")
}type B struct {visitor Visitor
}func (b *B) Visit(callback Callback) {fmt.Println("start execute B")b.visitor.Visit(callback)fmt.Println("finish execute B")
}type C struct {visitor Visitor
}func (c *C) Visit(callback Callback) {fmt.Println("start execute C")callback()fmt.Println("finish execute C")
}func main() {a := new(A)b := new(B)c := new(C)a.visitor = bb.visitor = ca.Visit(func() {fmt.Println("execute callback")})
}

打印输出

start execute A
start execute B
start execute C
execute callback
finish execute C
finish execute B
finish execute A

k8s中的源码

type DecoratedVisitor struct {visitor    Visitordecorators []VisitorFunc
}
func (v DecoratedVisitor) Visit(fn VisitorFunc) error {return v.visitor.Visit(func(info *Info, err error) error {if err != nil {return err}for i := range v.decorators {if err := v.decorators[i](info, nil); err != nil {return err}}return fn(info, nil)})
}

结论

阅读输出,可以很清楚看出,visitor在前,先执行,callback在中断执行

k8s里的Visitor模式学习相关推荐

  1. Visitor模式学习

    意图: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 似乎理解很麻烦,其实说白了,就是动态的给已经写好的代码(类)加入新的功能! 当然,首 ...

  2. Go 编程模式:k8s Visitor 模式

    本篇文章主要想讨论一下,Kubernetes 的 kubectl 命令中的使用到到的一个编程模式 – Visitor(注:其实,kubectl 主要使用到了两个一个是Builder,另一个是Visit ...

  3. 设计模式学习笔记——访问者(Visitor)模式

    设计模式学习笔记--访问者(Visitor)模式 @(设计模式)[设计模式, 访问者模式, visitor] 设计模式学习笔记访问者Visitor模式 基本介绍 访问者案例 类图 实现代码 Visit ...

  4. 设计模式学习笔记--访问者(Visitor)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式 ...

  5. visitor 模式

    考虑一下设计一个可以包含长方形.正方形.圆形以及文字的视图类.因为视图中每种元素的显示方式都不一样,所以我们很容易做出如下的设计: 在这里,我使用了COMPOSITE模式.对于COMPOSITE模式, ...

  6. K8S云原生环境渗透学习

    转载至​​​​​​K8S云原生环境渗透学习 - 先知社区 K8S云原生环境渗透学习 前言 ​ Kubernetes,简称k8s,是当前主流的容器调度平台,被称为云原生时代的操作系统.在实际项目也经常发 ...

  7. 【k8s】docker网络模式(必知)

    docker网络部分的视频我看了很多,讲解最透彻的还是https://www.bilibili.com/video/BV123411y7TB?p=8 获取本文方式:见谷粒商城文尾,备注[docker网 ...

  8. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

  9. js正则贪婪模式_JavaScript正则表达式迷你书之贪婪模式-学习笔记

    这篇文章主要介绍了JavaScript正则表达式迷你书之贪婪模式-学习笔记,需要的朋友可以参考下 贪婪模式: 在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如: ...

最新文章

  1. VIEW登陆故障解决办法。
  2. 安卓Webview缓存网页数据(无网络正常显示)
  3. mysql的redo日志_MySQL redo与undo日志解析
  4. python学习笔记--迭代器
  5. 一个android工程生成两个aar,android studio生成aar包并在其他工程引用aar包(示例代码)...
  6. Java基础----JAVA语言的概述和开发环境的搭配
  7. LuckyFrame执行Web自动化用例
  8. C#教程第四课:循环控制语句
  9. apt-get update出现404 Not Found
  10. 杭电2072 单词数
  11. 详解python使用browsermobproxy获取当前网页xhr的get数据方法
  12. 【sql】SQL3 查找当前薪水详情以及部门编号dept_no
  13. vs2019无法启动程序 系统找不到指定文件
  14. python合法整型常量要符合什么条件_1.下列字符列中,合法的长整型常量是: 【 】...
  15. ubuntu安装fcitx五笔拼音输入法_Simplelife_新浪博客
  16. MD5骨骼动画模型加载
  17. vue buid打包,修改环境变量
  18. 探针台选型的注意事项有哪些
  19. C语言中return的作用
  20. qt中bug总结:遇到C1071:在注释中遇到意外的文件结束

热门文章

  1. boost | 函数与回调(三)signals2
  2. Java的JFrame窗体的创建(两种方法)
  3. 有了开发板和平台资源,AI语音技能开发没有想象那么难
  4. java jolt_java – Jolt条件规范
  5. 空指针和野指针—你和上铺兄弟的爱恨情仇
  6. 三星note9运行linux,三星Note9:SPen可远程控制手机
  7. TDA4VM 8.4 RTOS SDK 中 SBL 的编译流程解析与makefile 分析笔记
  8. 基于EKF的车辆状态估计系统建模
  9. JavaScript从变量到正则表达式的记忆重点
  10. springboot + Mybatis +前端layui 项目总结(一)