设计模式 -- 访问者模式

news2024/9/24 3:21:42

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是访问者模式?

        访问者模式是一种行为型设计模式,它允许你将算法与对象结构分离。通过此模式,你可以在不修改现有类的情况下向现有类层次结构中添加新的行为。

        在访问者模式中,有两类对象:元素和访问者。元素是一个具有某些接受访问者的方法的对象,而访问者是一个实现了访问者接口的对象,该接口定义了访问者如何访问元素。

二、访问者模式的优缺点:

优点:

  1. 增加新的操作很容易,只需要增加一个新的访问者即可,不需要修改原有的代码。

  2. 将数据结构与操作分离,使得数据结构可以独立于操作而变化,而操作也可以独立于数据结构而变化。

  3. 可以避免使用大量的条件语句来判断数据结构中的元素类型,使代码更加清晰简洁。

  4. 可以提高代码的复用性和扩展性,使得系统更加灵活。

缺点:

  1. 增加了类的数目,使得系统更加复杂。

  2. 访问者模式中的数据结构必须支持迭代器,这限制了一些数据结构的使用。

  3. 访问者模式实现起来比较复杂,需要对访问者、元素等多个类进行设计和编码。

三、访问者模式的结构:

 

(1)Visitor:接口或者抽象类,它定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法数理论上来讲与元素个数是一样的,因此,访问者模式要求元素的类族要稳定,如果经常添加、移除元素类,必然会导致频繁地修改Visitor接口,如果这样则不适合使用访问者模式。

(2)ConcreteVisitor1、ConcreteVisitor2:具体的访问类,它需要给出对每一个元素类访问时所产生的具体行为。

(3)Element:元素接口或者抽象类,它定义了一个接受访问者的方法(Accept),其意义是指每一个元素都要可以被访问者访问。

(4)ConcreteElementA、ConcreteElementB:具体的元素类,它提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法。

(5)ObjectStructure:定义当中所说的对象结构,管理了元素集合,并且可以迭代这些元素供访问者访问。

四、访问者模式实战:

        以上图为例

1.创建元素

 

 

2.创建visitor

 

 

 

3.创建objectStructure

 4.测试

 5.测试结果

五.总结:

访问者模式的应用场景包括:

  1. 编译器的语法树遍历:访问者模式可以用于遍历语法树并执行特定的操作,例如生成中间代码,执行优化等。

  2. 数据库操作:访问者模式可以用于查询数据库并执行特定的操作,例如计算平均值,求和等。

  3. GUI组件:访问者模式可以用于遍历GUI组件并执行特定的操作,例如更新UI,处理输入事件等。

  4. XML解析:访问者模式可以用于遍历XML文档并执行特定的操作,例如生成HTML页面,提取数据等。

  5. 设计模式中的其他模式:访问者模式可以与其他设计模式一起使用,例如组合模式,迭代器模式等。

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

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

相关文章

SpringCloud入门实战(七)-Hystrix服务降级

📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 。 💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看&…

三翼鸟:传统品牌只盯局部,智慧品牌谋划全局

“当今企业之间的竞争,不是产品之间的竞争,而是商业模式之间的竞争。”很多人都听过现代管理学之父德鲁克的这句话,但又有多少人真正理解了它? 以当下的语境去看,这里其实就是“自利”和“共荣”的区别。前者&#xf…

多臂老虎机问题

1.问题简介 多臂老虎机问题可以被看作简化版的强化学习问题,算是最简单的“和环境交互中的学习”的一种形式,不存在状态信息,只有动作和奖励。多臂老虎机中的探索与利用(exploration vs. exploitation)问题一直以来都…

Zabbix“专家坐诊”第189期问答汇总

问题一 Q:您好,为什么在shell脚本中,不写mysql命令的绝对路径,zabbix获取不到输出的值? A:mysql默认命令是针对root等有权限才能直接使用的,其他用户要使用要指定命令路径。 Q:zab…

SLB负载均衡haproxy的安装及使用

1.介绍 HAProxy是什么 HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速(最新稳定版1.7.2于2…

【剧前爆米花--爪哇岛寻宝】网络互连,网络通信和网络分层

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是一篇关于网络初识的文章,在这篇文章中讲解了局域网广域网,IP地址,端口以及网络分层等相关内容,希望对你有所帮助! 目录 网络互连…

无线通信网 - 无线局域网 WLAN(802.11 标准)

文章目录 1 概述2 WLAN2.1 802.11 标准2.2 网络分类2.3 通信技术 3 扩展3.1 移动通信3.2 网工软考真题 1 概述 #mermaid-svg-UcgosJsdJfSTEm0Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UcgosJsdJfSTEm0Y .err…

PMO和PM必备六大复盘方法工具汇总

无论是对于企业还是个人来说,复盘都是一个能让我们快速成长的方法,尤其是项目经理和PMO,你是带领项目团队的,每一次项目的完成,都有很多经验,俗话说,最大的浪费是经验的浪费! 复盘的…

如何解决国外主机托管中遇到的常见问题?

在国际化发展的今天,越来越多的企业和个人选择将网站托管在国外主机上。这样做的好处是显而易见的,如更好的网站访问速度、更多的服务器资源、更优质的服务和更灵活的管理权限等。但同时,使用国外主机也会带来一些问题。本文将讨论国外主机托…

浪潮信息龙蜥联合实验室领衔成立 Serverless SIG 打造标准化开源解决方案

近日,浪潮信息龙蜥联合实验室在龙蜥社区领衔成立 Serverless SIG(服务器无感知计算 SIG),并举行了首届 Serverless SIG MeetUp,活动由浪潮信息龙蜥联合实验室主办,来自浪潮信息、天津大学、阿里云、Intel、…

面板数据熵权topsis法分析流程

面板数据熵权topsis法分析流程 一、案例背景 当前有9家公司连续5年(2018-2022年)的财务指标数据,想要通过这份数据,确定9家公司的财务排名情况。因为各项财务指标的权重有所不同,所以选择使用熵权topsis法进行研究。 …

unity GI 系统

间接光没有办法实现实时计算,所以需要一套GI系统去处理间接光。 GI系统主要解决的是间接光漫反射的实现,实现的载体是LightMap、Light Probe、Refletion Probe。需要一个后台程序(离线渲染器)来实现离线渲染。可以根据不同的物体…

iPhone清理工具:4Easysoft iPhone Cleaner for Mac

4Easysoft iPhone Cleaner for Mac是一款Mac上的iPhone清理软件,它可以帮助用户清理iPhone上的垃圾文件、缓存文件、无用图片和视频等,从而释放iPhone的存储空间,提高设备的性能。全面扫描您的 iOS 设备并对不必要的数据进行分类。轻松删除 i…

【软件测试面试】面试技巧,让面试官记住的自我介绍,疯狂收割offer.....

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在讨论如何自我介…

CASAIM全自动3d测量仪自动检测差速器差壳全尺寸测量装配检测

随着汽车行业的新变化,汽车零部件行业也呈现出新的发展趋势。汽车零部件产品作为汽车制造业的配套产业,发展也十分迅速。  差速器作为汽车关键零部件,由差速器差壳、行星齿轮、半轴齿轮、半轴和行星齿轮轴组装而成。 差速器差壳通常采用一…

算法基础(三)(共有20道例题)

七、数学知识 (一)质数 质数(素数) 的定义: 互质的定义:除了1以外,两个没有其他共同质因子的正整数称为互质,比如3和7互质。因为1没有质因子,1与任何正整数&#xff08…

ASEMI代理ADI亚德诺ADM202EARNZ-REEL车规级芯片

编辑-Z ADM202EARNZ-REEL芯片参数: 型号:ADM202EARNZ-REEL 工作电压范围:4.5-5.5V VCC电源电流:2.5 mA 输入逻辑阈值低:0.8V 输入逻辑阈值高:2.4V 输出电压摆幅:9.0V 变送器输出电阻&am…

IMF: Interactive Multimodal Fusion Model for Link Prediction

[2303.10816] IMF: Interactive Multimodal Fusion Model for Link Prediction (arxiv.org) 目录 1 背景 2 贡献 3 模型 3.1 Overall Architecture 3.2 Modality-Specific Encoders 3.3 Multimodal Fusion 3.4 Contextual Relational Model 3.5 Decision Fusion 3.6 …

GNSS监测站在滑坡和地质灾害中的应用

《地质灾害防治条例》涉及的地质灾害包括崩塌、滑坡、泥石流、地面沉降、地面塌陷和地裂缝等,已成为我国主要的自然灾害,严重威胁着人民的生命财产安全和生存环境以及国家重大工程的建设,制约着我国国民经济的可持续发展。 我国的地质灾害监…

【gcd性质】最小公倍数挑战

题目-最小公倍数挑战 (51nod.com) 题意: 思路: 要找到三个数使得他们的lcm尽可能大 那就让这三个数都两两互质,且三个数的积尽可能大 若n为奇数,考虑n-1和n-2 n和n-1一定互质,那么考虑n和n-2是否互质 结论是&…