设计模式之访问者模式

设计模式 -- 访问者模式(Visitor Pattern) 封装一些作用于某些数据结构中的各元素的操作,它可以在不改变数据结构的前提下赋予这些元素新的操作。 应用场景 对象结构比较稳定,但是需要在对象结构的基础上定义新的操作。 需要对同一个类的不同对象执行不不同的操作,但是不希望增加操作的时候改变这些类。 总结 准确识别出Visitor实用的场景,如果一个对象结构不稳定决不可使用,不然在增删元素时改动将非常巨大。 对象结构中的元素要可以迭代访问 Visitor里一般存在与元素个数相同的visit方法。 元 阅读详情

访问者模式,不太好讲,因为这个不太好举例子,所以印象也不是很深刻。

但是,这个模式它强调是稳定的数据结构,以及经常需要发生变化的操作,操作这种数据结构。

体现在类里面,就是,一个已经做好的类,封装好的东西,现在增加了一种操作,那你怎么办?

1,你可以重新写这个类,直接加个操作。可是,这样违背了“开闭原则”,当你这个操作经常发生变化时,就是不可行的。

2.你该把这个操作,单独的写一个类,对操作进行封装。让他作为一个“访问者”可以访问需要进行操作的数据结构。

而你的这个需要操作的数据结构,则需要,有个accept()的方法,来表示,我接受,你们这些访问者。

这样,在不需要改动以前的类的基础上,就增加了这个新的操作。

 以下是访问者模式的组成结构:

1)        访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。

2)        具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明的操作。

3)        元素角色(Element):定义一个Accept操作,它以一个访问者为参数。

4)        具体元素角色(Concrete Element):实现由元素角色提供的Accept操作。

5)        对象结构角色(Object Structure):这是使用访问者模式必备的角色。它要具备以下特征:能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。


《设计模式》一书中给出了访问者模式适用的情况:

1)        一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。

2)        需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor使得你可以将相关的操作集中起来定义在一个类中。

3)        当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。

4)        定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。


访问者模式的优点:
•使得 增加新的访问操作变得很容易。如果一些操作依赖于一个复杂的结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此,变得很容易。
• 将有关元素对象的访问行为集中到一个访问者对象中,而不是分散到一个个的元素类中。
•访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。迭代子只能访问属于同一个类型等级结构的成员对象,而不能访问属于不同等级结构的对象。访问者模式可以做到这一点。
•让用户能够在 不修改现有类层次结构的情况下, 定义该类层次结构的操作。
访问者模式的缺点:
• 增加新的元素类很困难。在访问者模式中,每增加一个新的元素类都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作,违背了“开闭原则”的要求。
• 破坏封装。访问者模式要求访问者对象访问并调用每一个元素对象的操作,这意味着元素对象有时候必须暴露一些自己的内部操作和内部状态,否则无法供访问者访问。

设计模式之访问者模式详解(Visitor Pattern) 最复杂的设计模式,并且使用频率不高,《设计模式》的作者评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。 访问者模式是一种将数据操作和数据结构分离的设计模式。(觉得太抽象,可以看下面的例子)。 模式的定义与特点 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的... 阅读详情

相关推荐

【设计模式】——访问者模式(Visitor Pattern)

访问者模式(Visitor Pattern)是一种行为型设计模式,用于在不改变现有对象结构的情况下,定义对对象结构中各个元素的访问操作。本文将详细探讨访问者模式在C++中的应用,并通过示例代码进行说明。

J^T的博客 1071

设计模式-访问者模式-Visitor Design Pattern

这是一种行为设计模式。它管理对象之间的算法、关系和责任。它用于在运行时对一组类似的对象执行操作。它将操作与对象结构解耦。使用访问者模式,我们可以在不改变现有代码的情况下轻松地向现有的类层次结构添加新的行为。有时,它也被称为行为模式(behavioral pattern)。访问者模式的主要目标是将操作逻辑从对象移动到另一个类中。使用访问者模式,我们可以实现开闭原则。根据GoF,访问者设计模式被定义为:访问者模式是一种操作对象结构中元素的操作方法。它允许您定义一个新的操作,而。

Java程序员的知识博客 1354

SpringBoot3 + Vben5.0实战:从零搭建企业级管理后台(附完整代码)

本文详细介绍了如何从零开始,使用SpringBoot3与Vben5.0技术栈搭建现代化企业级管理后台。通过对比分析,阐述了该组合在开发效率、性能(如虚拟线程)和权限模型(RBAC)方面的优势,并提供了从项目初始化、核心功能开发到部署运维的完整实战指南,帮助开发者快速构建高性能、易维护的后台系统。

weixin_29306317的博客 172

23种设计模式之访问者模式(Visitor Pattern)

本篇文章将23种设计模式中的访问者模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2116

Drools vs URule:5个真实项目场景告诉你如何选择开源规则引擎

本文通过电商风控、物流计费、会员体系、保险定价和物联网告警五个真实项目场景,深度对比了Drools与URule两款开源规则引擎。分析了两者在规则复杂度、性能表现、开发运维及适用场景上的核心差异,为技术选型提供基于实战的决策指南。

k6l7m8n9的博客 945

设计模式-访问者模式-Visitor Pattern

访问者模式提供了一种将操作和对象结构分离的方法,使得你可以在不修改对象结构的情况下增加新操作。这种模式在处理复杂对象结构和需要动态添加操作的场景中非常有用。访问者模式是一种强大的模式,它允许你向对象结构添加新的操作而不需要修改对象结构本身。然而,它也带来了一些缺点,如增加系统复杂性和维护难度。因此,在决定使用访问者模式时,需要权衡其优缺点,确保它适合你的应用场景。通常,当对象结构相对稳定,而需要对结构中的元素执行多种操作时,访问者模式是一个不错的选择。

wesigj的博客 1614

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

设计模式 22 访问者模式 Visitor Pattern

访问者模式是一种行为型设计模式,它允许你在不改变已有类结构的情况下,为一组对象添加新的操作。它将算法与对象结构分离,使你能够在不修改现有类的情况下,为这些类添加新的操作。访问者模式是一种强大的设计模式,但需要谨慎使用。在实施访问者模式时,需要仔细考虑元素接口和访问者接口的设计,以及具体访问者类的实现。同时,需要了解访问者模式的局限性,并选择合适的应用场景。

jxusthusiwen的专栏 1306

Windows与Linux安装miniconda并启动python项目及指令

官方介绍:Miniconda 是 conda 的免费最小安装程序。它是 Anaconda 的一个小型引导版本,仅​​包含 conda、Python、它们都依赖的包以及少量其他有用的包(例如 pip、zlib 等)。如果您需要更多软件包,请使用该 命令从 Anaconda 公共存储库或其他渠道(例如 conda-forge 或 bioconda)默认提供的数千个软件包中进行安装。minicoda下载地址最好挂个梯子。如果你需要指定版本的conda,可以在这里下载历史版本的miniconda。

一直走的很慢的鸭子 3192

基于YOLOv8的植物生长阶段识别系统设计与实现

本文详细介绍了一个基于YOLOv8深度学习模型的植物生长阶段识别系统,包含完整的数据集构建、模型训练、评估以及基于PyQt5的用户界面开发过程。系统能够自动识别植物在不同生长阶段(如发芽期、生长期、开花期、结果期等)的形态特征,为精准农业和智能种植提供技术支持。文章提供了完整的代码实现,并讨论了模型优化策略和实际应用场景。关键词:植物生长阶段识别、YOLOv8、目标检测、PyQt5、深度学习。

YOLO 466

设计模式:访问者模式(Visitor Pattern)

访问者模式是一种行为型设计模式,它将数据结构与对数据的操作分离。通过在不改变数据结构的前提下,定义作用于这些数据结构的新操作。

TechNomad的博客 1509

《用 AI 赋能医药科研创新》目录(持续更新)

本专栏旨在指导医学科研和药物研发人员运用AI技术提升研究效率。内容包括:利用AI分析文献、识别研究热点、自动生成研究草稿;在新药研发中,通过AI优化临床方案设计、受试者筛选等环节;介绍AI理论基础如大语言模型、提示词工程学及智能体技术发展历程。专栏采用5000-9000字的长文形式,系统讲解AI在医药研发各环节的应用方法,帮助研究者缩短周期、降低成本,推动医药研发进入智能化新阶段。

MD Code 501

23种设计模式——访问者模式 (Visitor Pattern)

本文介绍了23种经典设计模式之——访问者模式 (Visitor Pattern)的使用及说明

Meteors.的博客 1199

全志平台camera驱动开发(3)MIPI接口camera驱动开发

详细沟通: 请加video_D 目前开发过的allwinner平台: V5/V3/V3S/V40/T3/T7/A64等 开发过的mipi sensor: sony:imx317、imx477、imx274、imx258、imx286、imx307、imx385等 ov:ov2718、ov12895、ov2710等 ar: ar0238等 国产:gc1024、gc1034...

jzwjzw19900922的博客 9030

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【设计模式二十五之访问者模式VisitorPattern】访问者VisitorPattern模式

访问者模式细说访问者模式细说访问者模式定义UML模型基于UML的代码场景一场景代码场景二场景代码访问者模式应用和注意事项 细说访问者模式 提示: 博主:章飞 _906285288的博客 博客地址:http://blog.youkuaiyun.com/qq_29924041 细说访问者模式 定义 UML模型 基于UML的代码 场景一 场景 代码 场景二 场景 代码 访问者模式应用和注意事项 欢迎继续...

章飞 _906285288的博客 505

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

设计模式 - 行为型模式_ 访问者模式Visitor Pattern

文章目录定义 定义 访问者模式是⼀种⾏为设计模式, 它能将算法与其所作⽤的对象隔离开来。 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 ...

小工匠 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式教程:访问者模式(Visitor Pattern)

表示一个作用于某对象结构中的各元素的操作,它可以在不改变元素类的前提下定义作用于这些元素的新操作。

遇见伯灵说的博客 1109

设计模式访问者模式(VisitorPattern)

核心模块:抽象访问者、具体访问者、抽象元素、具体元素、对象结构 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 目的:封装一些施加于某种数据元上上的操作,使不改变元素类的情况下定义作用于这个元素的新操作; 使用场景:数据元很少改变,但是数据元上的操作经常改变; 优点:方便添加新操作,有关元素对象的访问

didiao11300的专栏 273

【C#设计模式】21.访问者模式(Visitor Pattern)【行为型】

在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题?.........

星Yeah 的博客 1704

设计模式之-访问者模式(Visitor Design Pattern)

访问者模式是行为的设计模式之一。访问者模式的使用时,我们必须是对一组类似种类对象统一操作。在访问者模式的帮助下,我们可以转移这套逻辑到另一个类进行操作。 例如,考虑一个购物车,我们可以添加不同类型的项目(元素),当我们点击结帐按钮,就计算要支付的总金额。现在,我们可以在项目类的计算逻辑,或者我们可以使用访问者模式这个逻辑移动到另一个类上使用这套访问模式。让我们来实现这个访问者模式的例...

weixin_30419799的博客 152

设计模式-21访问者模式Visitor Pattern

访问者模式是一种行为型设计模式,允许在不修改已有类结构的情况下添加新操作。该模式将算法与操作对象分离,适用于需要在不改变对象类的前提下定义新操作(如显示、价格计算、维护等)的场景。通过访问者接口和具体访问者实现(如ComputerPartDisplayVisitor、ComputerPartPriceVisitor),可以对复杂对象结构(如计算机部件)执行不同操作。当对象结构稳定但经常需要新增操作时,访问者模式能有效避免"污染"原有类代码。

d3y1`5 81_09 1021

Java设计模式——访问者模式【Visitor Pattern】

Java设计模式、访问者模式、Visitor Pattern

scorpio的博客 386

设计模式——访问者模式(Visitor Pattern)+ Spring相关源码

访问者模式,将 数据结构 与 数据操作 分离。

码鹿的记录 1500

23种设计模式-22访问者模式(Visitor Pattern)

摘要: 访问者模式是一种行为设计模式,用于分离对象结构与操作逻辑。它适用于对象结构稳定但操作频繁变化的场景,如编译器对语法树的不同处理。该模式通过Visitor接口定义访问方法,由具体访问者实现不同操作,元素类通过accept方法接受访问者调用。示例展示了图形对象(点、圆、矩形)的面积和周长计算,演示了如何在不修改元素类的情况下扩展新操作。访问者模式解决了数据与算法的耦合问题,但可能降低代码可读性,应谨慎使用。该模式适合需要跨类层次执行统一操作或频繁添加新操作的场景。

不开心就吃辣 833
上一篇: 设计模式之状态模式
下一篇: 设计模式之中介模式
Scofield-
博客等级 码龄14年 12粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值