左耳听风_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.mfbz.cn/a/754949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac Canon打印机连接教程

官网下载安装驱动: 选择打印机类型和mac系统型号下载即可 Mac PS 打印机驱动程序 双击安装 系统偏好设置 点击“”添加: OK可打印玩耍!! 备注: 若需扫描,下载扫描程序: 备注:…

设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性

# 适用于Windows系统 # 时间 : 2024-06-28 # 作者 : 三巧(https://blog.csdn.net/qq_39124701) # 文件名 : 设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性.ps1 # 使用方法: 打开记事本,将所有代码复制到记事本中,保存文件时候修改文件后…

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer,ZeRO)算法实现,一个来自DeepSpeed,另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之…

zabbix-server的搭建

zabbix-server的搭建 部署 zabbix 服务端(192.168.99.180) rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm cd /etc/yum.repos.d sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix# zabbix.r…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器,也称为LED显示器,或点阵显示器,应用广泛。在…

“Hello, World!“ 历史由来

布莱恩W.克尼汉(Brian W. Kernighan)—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

C++ | Leetcode C++题解之第203题移除链表元素

题目: 题解: class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(1)嵌入式计算机系统概述

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blog.csdn.net/qianshang52013/article/details/139975720?spm1001.2014.3001.5501 根据IEEE(国际电气电子工程师协会)的定义,嵌入式系统是&q…

Linux高并发服务器开发(六)线程

文章目录 1. 前言2 线程相关操作3 线程的创建4 进程数据段共享和回收5 线程分离6 线程退出和取消7 线程属性(了解)8 资源竞争9 互斥锁9.1 同步与互斥9.2 互斥锁 10 死锁11 读写锁12 条件变量13 生产者消费者模型14 信号量15 哲学家就餐 1. 前言 进程是C…

哪吒汽车,正在等待“太乙真人”的拯救

文丨刘俊宏 在360创始人、哪吒汽车股东周鸿祎近日连续且着急的“督战”中,哪吒汽车(下简称哪吒)终究还是顶不住了。 6月26日,哪吒通过母公司合众新能源在港交所提交了IPO文件,急迫地希望成为第五家登陆港股的造车新势力…

uniapp中实现瀑布流 短视频页面展示

直接上干货 第一部分为结构 <swiper class"list" :currentindex change"swiperchange" scrolltolower"onReachBottom"><swiper-item style"overflow: scroll;" v-for"(item,index) in 2" :key"index"&g…

DataV大屏组件库

DataV官方文档 DataV组件库基于Vue &#xff08;React版 (opens new window)&#xff09; &#xff0c;主要用于构建大屏&#xff08;全屏&#xff09;数据展示页面即数据可视化&#xff0c;具有多种类型组件可供使用&#xff1a; 源码下载

Golang | Leetcode Golang题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; func countPrimes(n int) int {primes : []int{}isPrime : make([]bool, n)for i : range isPrime {isPrime[i] true}for i : 2; i < n; i {if isPrime[i] {primes append(primes, i)}for _, p : range primes {if i*p > n {break}…

智能交通(1)——杭州交通数据集

赛题简介 在本地赛题中&#xff0c;参赛团队需要在平台提供的仿真交通场景下&#xff0c;通过算法模型驱动交通信号灯&#xff0c;以在各种交通状况&#xff08;高峰期、雨天等&#xff09;下都能最大程度地服务车辆&#xff0c;使其在模拟环境中获得综合最大得分。 数据集 …

Docker 部署 MariaDB 数据库 与 Adminer 数据库管理工具

文章目录 MariaDBmariadb.cnf开启 binlog Adminerdocker-compose.ymlAdminer 连接 MariaDB MariaDB MariaDB是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是MySQL的一个分支和替代品。 官网&#xff1a;https://mariadb.com/镜像&#xff…

GPU算力是什么,哪些行业需要用到GPU算力?

近两年&#xff0c;计算能力已成为推动各行各业发展的关键因素。而GPU&#xff08;图形处理器&#xff09;算力&#xff0c;作为现代计算技术的重要分支&#xff0c;正逐渐在多个领域展现出其强大的潜力和价值。尚云将简要介绍GPU算力的定义和基本原理&#xff0c;并探讨其在哪…

对于CDA一级考试该咋准备??!

一、了解考试内容和结构 CDA一级考试主要涉及的内容包括&#xff1a;数据分析概述与职业操守、数据结构、数据库基础与数据模型、数据可视化分析与报表制作、Power BI应用、业务数据分析与报告编写等。 CDA Level Ⅰ 认证考试大纲:https://edu.cda.cn/group/4/thread/174335 …

从架构设计的角度分析ios自带网络库和AFNetworking

总结&#xff08;先说明文章分析出的一些‘认知’&#xff09; 从本文中&#xff0c;我们可以总结出一些框架设计上的“认知”&#xff1a; 对于通用的常规配置信息方面的设计&#xff0c;我们可以通过定义一个“类似于NSURLSessionConfiguration、NSURLRequest”的类来完成设…

Python | Leetcode Python题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def removeElements(self, head: ListNode, val: int) -> Li…