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

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

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

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

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

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

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

文章里呢有一段代码,这里呢有一个visitor的函数定义,还有一个shape接口,它呢需要使用visitor函数作为参数。参考资料:https://51gx.top/detail/252

我们实地的对象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的代码。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础之错误和异常讲解

文章目录 1 错误和异常1.1 简介1.1.1 语法错误1.1.2 异常 1.2 抛出异常1.2.1 抛出原装异常1.2.2 assert异常1.2.3 抛出用户自定义异常 1.3 异常处理1.3.1 try/except1.3.2 try/except...else1.3.3 try-finally 语句1.3.4 with 关键字 1.4 分析记录错误1.4.1 分析错误1.4.2 记录…

Hive笔记-6

6.2.8 聚合函数 1) 语法 count(*),表示统计所有行数,包含null值; count(某列),表示该列一共有多少行,不包含null值; max(),求最大值,不包含null,除非所有值都是null&a…

不同node版本的切换及其指定版本vue-cli脚手架下载

目录 一.清空本地已安装node.js版本 二.装nvm管理工具 三.安装指定node版本 四.使用nvm命令切换或删除指定node版本 五.在指定node版本下下载指定vue-cli脚手架 一.清空本地已安装node.js版本 1.按健winR弹出窗口,键盘输入cmd,然后敲回车。 2.输入…

win11 + ubuntu linux双系统:开机直接进入windows修复

https://zhuanlan.zhihu.com/p/666702893 这种 双系统直接进入win 的问题,应该属于引导坏了,即grub坏了。 原因:笔记本送修了,没拆掉硬盘,可能引导被售后搞坏了。 在win-磁盘管理中查看分区,linux的分区…

《SpringBoot+Vue》Chapter04 SpringBoot整合Web开发

返回JSON数据 默认实现 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>在springboot web依赖中加入了jackson-databind作为JSON处理器 创建一个实体类对象…

8.javaSE基础进阶_泛型generics(无解通配符?+上下界统配符superextends)

文章目录 泛型generics一.泛型简介二.泛型类1.泛型方法 三.泛型接口四.泛型进阶1.*<?>无解通配符*2.上界通配符 < ? extends E>3.下界通配符 < ? super E>4.泛型擦除 泛型generics 一.泛型简介 JDK5引入,一种安全机制,编译时检测不匹配类型 特点: 将数…

学编程容易遇到的误区,请提前规避

随着互联网行业的蓬勃发展和编程技术的普及&#xff0c;越来越多的人开始对编程感兴趣。然而&#xff0c;编程学习并非一蹴而就&#xff0c;新手入门时常常会陷入误区&#xff0c;影响学习状态效率。 今天&#xff0c;我们来一起揭开编程学习常见的五大误区&#xff0c;希望能…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用

随着航空、航天、近地空间遥感平台的持续发展&#xff0c;遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升&#xff0c;呈现出大数据特征。这为相关研究带来了新机遇&#xff0c;但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

如何激活typora

话不多说&#xff0c;直接上流程。 1、先下载最新的typora安装包&#xff0c;并安装成功。 Typora的安装 &#xff08;1&#xff09;官网下载&#xff1a;https://typora.xnxxxk.cn/index.html?qhclickid777dd93d58082a46 2、下载百度云我上传的两个exe&#xff0c;不大&…

四轮转向控制器与里程计数据计算的实现

在机器人开发中,四轮转向(Four-Wheel Steering,简称4WS)广泛应用于提高车辆的操控性能和运动灵活性。本文将详细介绍如何通过C++代码实现一个四轮转向控制器,并结合里程计数据提供精准的车辆位置信息反馈。 一、头文件与命名空间 我们需要包括几个关键头文件来处理数学计…

Host Static Assets in CDN(在CDN中托管静态资源)

Host Static Assets in CDN&#xff08;在CDN中托管静态资源&#xff09; 什么是CDN&#xff1f; CDN&#xff08;内容分发网络&#xff0c;Content Delivery Network&#xff09;是一种分布式的网络基础设施&#xff0c;用于高效地分发内容。CDN在全球多个数据中心部署缓存服…

嵌入式实验---实验五 串口数据接收实验

一、实验目的 1、掌握STM32F103串口数据接收程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、STM32F103R6能通过查询中断方式接收数据&#xff0c;每接收到一个字节&#xff0c;立即向对方发送一个相同内容的字节&#xff0c;并把该字节的十六进…

Node.js的介绍与使用(附聊天案例)

Node.js 是一个基于 Chrome V8 JavaScript 引擎的开源、跨平台运行时环境。它使开发者可以在服务器端运行 JavaScript&#xff0c;从而实现全栈开发&#xff0c;即在客户端和服务器端都使用同一种编程语言。 主要功能和用途 服务器端开发&#xff1a;Node.js 主要用于构建高性…

Dahlia Hart: Stylized Casual Character(休闲角色模型)

此包包含两个发型和两个服装&#xff0c;每个都有多种颜色选择。每个发型都适合与物理资源一起使用&#xff0c;并包含各种表情和音素混合形状。 下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍

目录 引言 Fine-tuning技术的原理阐 预训练模型 迁移学习 模型初始化 模型微调 超参数调整 任务设计 数学模型公式 Dify平台介绍 Dify部署 创建AI 接入大模型api 选择知识库 个人主页链接&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 Fine-tuning技术允许用户根…

【ES】--Elasticsearch的高亮模式

目录 一、高亮策略1、Fast Vector Highlighter(快速向量高亮器)2、Posting Highlighter(帖子高亮器)3、Unified Highlighter(统一高亮器)4、Plain Highlighter(普通高亮器)5、总结二、高亮参数三、高亮案例解析1、words_one配置解析2、words_two配置解析3、words_three…

数据分析-常用模型-RFM模型

一、RFM模型的底层逻辑 漏斗模型中&#xff0c;大部分业务都是按流程推进&#xff0c;可以做漏斗分析。但是&#xff0c;大家有没有想过一个问题&#xff1a; 如果没有转化过程记录&#xff0c;该怎么办&#xff1f;如果用户行为频率很高&#xff0c;有几十个漏斗&#xff0c…

SysBench在windows下的压力测试教程(排坑,综合)

SysBench在windows下的压力测试教程 1.环境配置 官方开源 https://github.com/akopytov/sysbench 由于sysbench已经放弃了在windows上支持,所以可以构建windows下的linux系统进行测试(wsl),环境配置流程为:首先安装wsl,之后在wsl中安装sysbench,mysql,进一步在通过wsl连接主机…

使用Spring Boot构建微服务架构

使用Spring Boot构建微服务架构 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何利用Spring Boot构建微服务架构&#xff0c;以实现高效、可扩…

[数据库]索引机制

目录 索引机制 索引的类型 索引使用 哪些适合添加索引 ​编辑 索引机制 当没有索引的时候, 如下示例,在找到id等于1的时候, 仍然会往下继续查找, 进行全表扫描, 因为它认为下面也有可能还会有1 加上索引之后进行二叉树查找, 找到1之后, 发现1的左边没有了, 右边也没有了就停…