-->

左耳听风_116_115_Go_编程模式Kubernetes_Visitor模式

你好,我是陈浩网名左耳多浩子。

这节课呢我们来重点讨论一下cuba netice的酷ver CTL命令它使用到了一个编程模式叫做visitor. Visitor呢是面向对象模式中一个很重要的设计模式。

那这个模式呢是将算法与操作对象的结构分离的一种方法。

那这种分离的实际结果呢是可以在不修改结构的情况之下,像现有的对象结构中啊添加新的操作,是遵循开放封闭原则的一种方法。

那这节课呢我们重点学习一下cpl let中是怎么使用函数式的方法来实现这个模式的。

首先呢我带你学习一个简单设计模式的visitor的事例。

文章里呢有一段代码,这里呢有一个visitor的函数定义,还有一个shape接口,它呢需要使用visitor函数作为参数。

我们实地的对象circle和written功能,实现了shape接口的accept方法。

那这个方法呢就是在等外面给我们传递一个visitor.然后呢我们实现两个visitor,一个是用来做jason序列化的,另一个呢是用来做XML序列化的。

那么这个visitor啊使用起来就像文章里展示的。

这样其实呢这段代码的目的啊就是想解耦数据结构和算法啊,虽然用策略模式也可以完成,而且呢也会比较干净。

但是呢有一些情况会有多个vidor来访问一个数据结构的不同部分。

那这种情况呢,数据结构就有点像一个数据库,而各个vidator呢会成为一个个的小应用。

那酷per CTL就是这种情况。

那接下来呢我们来了解一下cruo unities相关的知识背景。

Cronnetice抽象了很多种的resource,比如说port replicasset、 confiicure map、 volumes、 name、 space,还有rose,种类非常繁多。

那这些东西呢构成了co onnetice的数据模型。

而cooper CTL呢是cooper natice中的一个客户端,命令操作人员啊,用这个命令来操作coper netice couper CTL会联系到couper nitice的APS server. Api server呢会联系每个节点上的cooper left,从而控制每个节点。

那酷per CTL的主要工作呢就是处理用户提交的东西。

接着呢会把用户提交的这些东西啊组织成一个数据结构体发送给APS server.呃,相关的源代码。

你可以点击文章里的链接,看一下cuver CT二的代码呢比较复杂。

不过简单来说,它的基本原理就是从命令行和压模文件中获取信息,通过builder模式把它转成一系列的资源。

最后呢用visitor模式来迭代处理这些resources.那接下来呢我们来学习一下酷柏CTL的实现。

那为了方便你的理解,我不会直接分析复杂的源码,而是用一个小的事例来表明。

首先我们来看一下它的visitor模式是怎么定义的那库per CTL主要是用来处理info结构器,文章里呢是相关的定义。

在这段代码中呢,有一个叫做visitor funt函数类型的定义,还有一个叫做visitor的接口,它需要一个visit方法,接收这个visitor funk.那最后呢我们给info实现visitor接口中的visit方法。

那具体实现呢就是直接调用传进来的方法。

那接下来呢我们再来定义几种不同类型的的儿。

首先是name visitor,这个visitor呢主要是用来访问info结构体中的name和name space成员。

在这段代码中呢,我声明了一个叫做name visitor的结构体。

那这个结构体里面呢有一个visitor接口成员。

那这里呢就意味着多肽在实现visitor方法的时候呢,我调用了自己结构体内部的那个visitor的visior方法。

那这个呢其实是一种修饰器的模式,用另一个visitor修饰了自己。

接下来呢是other visitor,它呢主要用来访问info结构中的other sense成员。

那实现逻辑呢和前面一样,我就不再重新讲。

然后呢是low visitor用来打日志。

那具体代码你可以去文章里看一下。

接下来呢我们就要使用这些visitor了。

我们可以看到这几个visitor呢,一层套一层,我呢用load file,假装从文件中读取数据,最后执行v点visit load file,那我们的代码就全部开始激活工作了。

在文章里呢我还贴了这段代码的输出信息。

那从中呢你可以看到这些代码是怎么执行起来的。

刚刚这些代码呢有这样几种功效,首先它解耦的数据和程序,其次它使用了修饰器模式。

另外呢他还做出了pipeline的模式。

那其实呢我们还可以再重构一下前面的代码,我们可以用修饰器模式来重构它。

那重构之后的代码并不复杂,我来解释一下。

首先我们用一个叫做decorated visitor的结构来存放所有的visitor find函数。

然后呢,我用new decorated visitor方法把所有的visitor funk呢传给它,构造出decorated visitor对象。

而这个decorated visitor呢实现了visitor方法里面呢,就是来做一个follow loop,按顺序调用所有的visitor funk.那这样呢我们的代码就可以像文章里展示的这样运作了。

你看这样就比之前的简单多了。

不过呢这里需要注意这个decorated visitor同样可以成为一个visitor来使用这些代码全部存在于酷per CTR的代码中。

那只要你看懂了,这里面的代码逻辑啊,就一定能看懂酷per CTR的代码。

好了,这节课到这里呢就结束了。

如果你觉得今天的内容啊对你有所帮助,欢迎你帮我分享给更多人嗯。