设计模式——访问者模式

news2024/11/18 10:39:22

访问者模式

  • 一、基本思想
  • 二、结构图

一、基本思想

将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。

二、结构图

在这里插入图片描述
抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。

具体访问者(ConcreteVisitor)角色:实现抽象访问者角色中声明的各个访问操作,确定访问者访问一个元素时该做什么。

抽象元素(Element)角色:声明一个包含接受操作 accept() 的接口,被接受的访问者对象作为 accept() 方法的参数。

具体元素(ConcreteElement)角色:实现抽象元素角色提供的 accept() 操作,其方法体通常都是 visitor.visit(this) ,另外具体元素中可能还包含本身业务逻辑的相关操作。

对象结构(Object Structure)角色:是一个包含元素角色的容器,提供让访问者对象遍历容器中的所有元素的方法,通常由 List、Set、Map 等聚合类实现。

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

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

相关文章

【安全硬件】Chap.7 对实体芯片采取物理手段破解;芯片IC逆向工程和拆分制造;物理上对芯片的攻击分类;侧信道攻击;Kocher针对RSA的计时攻击

【安全硬件】Chap.7 对实体芯片采取物理手段破解;芯片IC逆向工程和拆分制造;物理上对芯片的攻击分类;侧信道攻击;Kocher针对RSA的计时攻击前言1. 逆向工程Reverse Engineering逆向工程识别芯片上2输入NAND门逆向工程技术Decapulat…

CSS 实例系列

Hello 小伙伴们早上、中午、下午、晚上和深夜好,这里是 jsliang~本 CSS 系列文章:主推学以致用。结合面试题和工作实例,让小伙伴们深入体验 61 个工作常见的 CSS 属性和各种 CSS 知识。主推纯 CSS。尽可能使用 HTML CSS 完成学习目的&#x…

nohup命令详解

nohup命令详解一、背景说明:启动服务的时候,如果使用如下命令,则会在start.sh脚本所在的目录下,产生一个名为 nohup.out 的输出文件nohup ./startup.sh &可以看到下面这个例子,一开始当前目录是没有nohup.out文件的…

RocketMQ 多语言 SDK 开源贡献召集令

作者:艾阳坤 目前 Apache RocketMQ 5.0 SDK [ 1] 正在社区开源,开发与迭代也在火热进行中,欢迎广大社区的朋友们能够参与其中。我们欢迎任何形式的贡献,包括但不限于新 feature、bugfix、代码优化、生态集成、测试工作、文档撰写…

我与 CSDN 的 2022 年终总结

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 转眼间2023年已经过去…

《后端技术面试 38 讲》学习笔记 Day 02

《后端技术面试 38 讲》学习笔记 Day 02 08丨软件设计的方法论:软件为什么要建模? 原文摘抄 所谓软件建模,就是为要开发的软件建造模型。模型是对客观存在的抽象,我们常说的数学建模,就是用数学公式作为模型&#xf…

flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 bootstrap jinja 模版 三、菜鸟实战 初始化 Flask 框架,设置路由 各行政区房屋数量柱状图分析 区域二手房房源朝向分布情况 二手房单价最…

Higress Kruise Rollout: 渐进式交付为应用发布保驾护航

作者:扬少 前言 在业务高速发展过程中,如何最大化保障功能迭代过程中业务流量无损一直是开发者比较关心的问题。通常在应用发布新功能阶段,我们会采用灰度发布的思想对新版本进行小流量验证,在符合预期之后再进行全量发布&#…

11、JS笔记-内置对象

1.内置对象 js中对象分为三种: 自定义对象、内置对象、浏览器对象(js独有) 内置对象: js语言自带的对象,供开发者使用,提供一些常用或基本的功能(属性和方法) 2.Math对象 Math中所…

【云原生】k8s配置资源管理

内容预知 1.Secret的资源配置 1.1 Secret配置的相关说明 1.2 陈述式创建Secret配置 1.3 声明式base64编码创建Secret 1.4 将secret以volume形式挂载到pod中 1.5 将Secret导入到pod中,充当环境变量 1.6 实战运用:使用secret配置免密交互拉取habor…

Qt之对话框

文章目录一、对话框的概念二、与QWidget的区别三、对话框2种显示方法四、对话框返回值的概念本节示例提示:以下是本篇文章正文内容,下面案例可供参考 一、对话框的概念 对话框是和用户简短交互的一种窗口。如:登录界面,关于界面…

知识付费图文音视频课程公众号系统开发

知识付费图文音视频课程公众号系统开发 功能特性;为你介绍音视频课程点播系统的功能特性。 微信H5;目前只支持微信公众号H5访问。 课程管理;后台可上传多个课程分类与课程。 名师推荐;后台可以维护教师列表,并推荐到首页显示。 分享海报;可以自定义多个分享海报。 …

Maven在项目里的具体使用方式,很简单

大家好,今天给大家分享一下Maven在项目里的*具体使用方式* 有关于maven这个东西,要知道,它的作用是帮助开发人员(也就是我们)批量的管理jar包 所谓对jar包批量管理,有一个很重要的点, 就是对于…

2022年CSDN年终总结:一个新晋研究生的遗憾与成长

目录0 遗憾1 顺利完成毕业设计2 转向垂类写作3 C站成长4 组织社区活动5 新年新flag0 遗憾 2022年有很多遗憾 其一,毕业的遗憾。3月疫情席卷上海,封校封寝、静态网格,每天从上床到下桌两点一线,5月窗口期身着防护服撤离上海&…

云原生|kubernetes|pod或容器的安全上下文配置解析

前言: 安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置。 安全上下文包括但不限于: 自主访问控制(Discretionary Access Control): 基于用户 ID(UID&…

【PAT甲级 - C++题解】1091 Acute Stroke

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:PAT题解集合 📝原题地址:题目详情 - 1091 Acute Stroke (pintia.cn) 🔑中文翻译:急性中风 📣专栏…

SAP灵活工作流Inbox收件箱数据展示

目录 任务说明展示流程内容 使用增强添加文本展示流程内容 自定义页面展示 任务说明展示流程内容 维护审批任务说明页签下的任务说明,支持多语种,支持使用变量; 变量只能使用容器中定义的变量,因此需要将要展示的数据绑定传输到…

【包装机】(队列+栈)

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品&#x…

C++动态链接库的使用

目录一 创建Windows动态链接库二 导出和查看DLL中的函数三 隐式链接方式加载DLL四 动态库和测试程序共用一份头文件五 从DLL中导出C类六 解决名称改编七 显式加载方式加载DLL一 创建Windows动态链接库 新建项目,选择Windows桌面向导,命名项目名称为Dll1…

GPDB中gp_vmem_protect_limit参数的意义

gp_vmem_protect_limit参数的意义1、gp_vmem_protect_limit参数说明1)在启用了基于资源队列的资源管理系统时,gp_vmem_protect_limit参数表示每个segment分配到的内存大小。预估值计算方式:所有GP数据库进程可用内存大小/发生故障时最大的primary segmen…