再谈Iterator vs Visitor

Iterator和Vistor的描述见http://www.iteye.com/topic/21293。

啥时候用Iterator?啥时候用Vistor?从我的角度看来Vistor是为了解决Iterator的问题而出现的。Iterator有啥问题呢?设想这么一套类体系:类很多,几百个,类继承层次和关系也很多,这个时候,用Iterator,如下:

    while ( (node = iter.next()) != null){

.....

node.method1();

.....

    }

OK,处理方法是写在各个node里的,接下来,我想要为这套类体系加一个方法method2(),完了,严重的问题出现了,几百个类发生变动。如果我不把方法method2()写在node里呢?你的Iterator的处理方法会有一大堆的if/else来根据node的不同来做相应的处理,这个肯定同样也是不可取的。怎么办?Visitor出现了,它怎么解决这个问题?呵呵,它只不过帮你把方法挪个位置,当你需要在类体系中加一个method2()方法时,你实际上需要把所有的method2()方法搬到一个新建的Visitor中。

总结:当需要修改类体系增加遍历所需方法时,就增加一个Visitor,Visitor是为了维护类体系的稳定性而产生的模式,也这是它比Iterator优越的地方。

Arm CCA架构:硬件级机密计算与安全隔离技术解析 机密计算(Confidential Computing)通过硬件级隔离技术构建可信执行环境(TEE),是当前云安全和数据隐私保护的核心方案。Armv9-A引入的CCA架构采用物理地址空间隔离和Granule保护表(GPT)机制,实现4KB颗粒度的内存访问控制。该技术通过标准化的RMI/RSI接口规范,为虚拟化环境和安全敏感应用提供硬件级保护,特别适用于金融交易、医疗数据处理等需要严格隔离的场景。相比传统TEE方案,Arm CCA在隔离等级和动态权限管理方面具有显著优势,其Realm World设计为机密计算 阅读详情

相关推荐

基于资源预测的Agent弹性伸缩:在成本与响应延迟间寻找最佳平衡点

手动伸缩:完全由运维人员人工调整副本数或服务器数量,效率极低,现在基本只用于极小规模的业务。反应式伸缩:基于当前实时监控指标触发伸缩规则,比如CPU利用率超过70%就加2个副本,是目前应用最广泛的方案,典型代表是K8s HPA、KEDA。预测式伸缩:基于历史时序数据预测未来的负载,提前进行伸缩,解决反应式伸缩的滞后性问题,典型代表是AWS Predictive Scaling、阿里云预测式HPA。智能Agent伸缩。

SuperAGI2025 134

主控Iterator模式与被动Visitor模式

有朋友问我MeteorTL([url]http://www.meteortl.org[/url])优势列表中的主控Iterator模式优势具体指什么。 buaawhl的帖子已经分析很多: [url]http://www.iteye.com/topic/21293[/url] 我再补充的说一下: Visitor模式使用最多的时候是处理合成模式的树结构, 估计是受[GoF95]的...

梁飞的博客 239

AD学习笔记(一)基础认识

文章目录AD学习笔记第一讲 AD基础认识一、两库两图(分别对应下图)1、PCB图(pcbdoc)2、原理图(schdoc)3、原理图库(schlib)4、PCB库(pcblib)二、封装1、DIP封装2、LQFP封装三、绘制整体流程1、建立工程(PrjPcb)2、建立两库两图并保存整个工程(五次)3、从库中提取绘制原理图4、原理图导入pcb图5、根据原理图布线6、pcb图交由工厂打板 AD学习笔记 第一讲 AD基础认识 一、两库两图(分别对应下图) PCB图(pcbdoc) 原理图(schdoc) PCB库

qq_52465473的博客 6686

Yet another Iterator VS visitor

在论坛中有好几位同学都比较了Iterator和visitor模式,我也小小总结一下: Iterator和visitor模式都是对对象聚集进行访问,并对访问的元素进行操作, 它们都是把访问的职责从集合\元素类中分离出来。 但Iterator在遍历集合、树形结构时,往往只是遍历元素,而对元素的 操作通常在其职责之外,并且在一个遍历过程外在的对元素操作通常是单一的 至少不会是每个元素一种不同的...

fuliang 162

基于Pixi.js的Live2D看板娘离线加载实战指南

本文详细介绍了基于Pixi.js实现Live2D看板娘离线加载的完整方案,涵盖环境搭建、模型加载、交互功能实现及常见问题解决。通过Pixi.js的硬件加速优势,开发者可在Web和Electron项目中无缝集成离线运行的Live2D模型,提升用户体验并避免网络依赖问题。

weixin_29001423的博客 343

RV1126平台JD9366触摸屏驱动移植实战:从源码到烧录的完整指南

本文详细介绍了在RV1126平台上移植JD9366触摸屏驱动的完整流程,从环境准备、源码获取到驱动配置、内核编译、设备树设置以及固件烧录与测试验证。通过实战经验分享和常见问题排查,帮助开发者高效完成触摸屏驱动移植,适用于嵌入式Linux开发场景。

weixin_30872337的博客 409

Iterator vs Visitor, Pull vs Push

Iterator vs Visitor, Pull vs Push 名词界定 Iterator Pattern也叫做Generator, Sequence, Stream等。Java里面有Iterator Interface,大家应该比较熟悉,不再赘述。 完整的具有Visitor和Visited (Visitable) 两个部分的Visitor Pattern的使用并不广泛。 简单的只...

松篁 207

【重要内容】敬告读者

由于优快云近期将要搞事情,此专栏建议已购买的用户将内容保存到本地。尚未购买的用户请待9月1日后再决定是否需要购买。如此规则上线,本人将会关闭此专栏。并寻找其他渠道进行发布。

魔落的博客 910

JAVA设计模式之Visitor模式

<br />一个集合(Collection)中,可以包含一个Car,也可以包含一个Cat,对于不同类型的元素,他们的行为也不尽相同,比如,Car可能有start()行为,而Cat可能有eat()的行为。可是对于Collection来说,不管你是Car,还是Cat,取出来的都是Object,那么我们如何知道取出来的是什么呢?<br />我们可能会如下操作:<br />Iterator itor = collection.iterator();<br />while(itor.hasNext()){<br />

1万+

2024-江苏科技大学-模拟-动态接触角,模拟液滴撞击,comsol软件模拟。

相反,其对液滴粘度和平衡接触角的变化基本不敏感。重力势能的影响显著受过程参数调节,随着液滴直径和密度的增加而增加,而随着初始液滴速度和表面张力系数的增加而减小。通过考虑形状因子和粘度修正因子,可以准确定义表面能和粘性耗散能,使得所提出的半经验修正勺状模型表现出良好的性能,在所有65个研究案例中,液滴最大铺展长度因子(βmax)和中心厚度(h)的相对误差基本分别落在5%和10%的区间内。重力势能的影响受过程参数显著调节,随液滴直径和密度的增大而增大,随液滴初始速度和表面张力系数的增大而减小。

qq_15963745的博客 512

【ESP32接入国产大模型之Deepseek】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之Deepseek。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘鸣谢B站UP星汇极客ESP32对接DeepSeek API,实现AI大模型交互功能。

vor234的博客 1万+

Web显示层技术评估; Iterator vs Visitor, Pull vs Push

1. Web显示层技术评估 Web显示层技术评估 -- 1. 名词界定 2. 理论模型, 3. 数据寻址Web显示层技术评估 -- 4.评估指标Web显示层技术评估 -- 5.Scripted Template, 6, Template Manipulation, 7, Model Match, 8. 特性总表Web显示层技术评估 -- 9.Browser Side, 10, Unobtrusiv

buaawhl的专栏 3999

AgentScope实战训练营:从零搭建一个完整的A2A Agent应用

2024年4月,Google在Google Cloud Next大会上正式提出了A2A(Agent-to-Agent)协议,这是一个开放协议,旨在让不同的AI Agent之间能够像微服务一样相互发现、相互调用。通俗地讲:A2A协议就是AI Agent世界的HTTP协议——有了它,一个Agent可以把自己的能力以标准化的方式暴露出去,另一个Agent可以无缝地发现并调用它。本文将基于阿里巴巴开源的(Apache 2.0协议),手把手带你从零搭建一个完整的A2A Agent应用。

program哲学 564

Yield in Python/Ruby - Iterator/Visitor

Yield in Python/Ruby - Iterator/Visitor 首先,我们从Ruby的Iterator开始。Ruby程序员可以用yield关键字定义Iterator。例如,下面的abc()就是一个Iterator。 def abc() yield “a” yield “b” yield “c” end abc Iterator的调用方法如下: ...

buaawhl的专栏 191

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

相似的设计模式

原文地址:http://blog.youkuaiyun.com/ariesjzj/article/details/11555595 GoF在《Design Patterns: Elements of Reusable Object-Oriented Software》中总结了23种经典的设计模式,成为了该领域的经典。尽管除此之外后来又有人提出了很多其它设计模式,但因为较为零散且有些只针对特定语言,这里暂不涉...

吾道不孤也 262

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

区分那些相似的设计模式

原文地址:http://blog.youkuaiyun.com/ariesjzj/article/details/11555595 GoF在《Design Patterns: Elements of Reusable Object-Oriented Software》中总结了23种经典的设计模式,成为了该领域的经典。尽管除此之外后来又有人提出了很多其它设计模式,但因为较为零散且有些只针对特定语言,这里暂不...

weixin_30419799的博客 133

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

那些相似的设计模式的区别

GoF在《Design Patterns: Elements of Reusable Object-Oriented Software》中总结了23种经典的设计模式,成为了该领域的经典。尽管除此之外后来又有人提出了很多其它设计模式,但因为较为零散且有些只针对特定语言,这里暂不涉及。首先,《Design Patterns: Elements of Reusable Object-Oriented S...

TanJianCheng 762

【软件构造】--可复用性和可维护性

可复用性和可维护性

qq_53094471的博客 659

【软考设计模式】迭代器模式:聚合遍历的封装与内部表示隐藏精讲

【软考设计模式】迭代器模式:聚合遍历的封装与内部表示隐藏精讲

ttod的博客 427

23个设计模式一文搞懂

本笔记涵盖 23 种经典设计模式,按创建型、结构型、行为型三大类整理。每个模式配有生活类比、核心思想、结构图解、实现要点、真实应用案例、适用场景、优缺点分析及常见面试题。

weixin_72753562的博客 802

Java 23 种设计模式:从踩坑到精通 —— 开篇及系列介绍

摘要:本文是《Java 23种设计模式:从踩坑到精通》系列的总入口与导航页。文章梳理了设计模式的起源与三大分类,结合SOLID六大原则,详解为什么2026年设计模式依然重要。提供25篇完整目录、面试高频Top10速记、场景速查索引、易混模式对比表及分级阅读路线,可作为长期收藏的设计模式学习手册。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 3581

【Java 23种设计模式实战】

本文通过电商订单系统实战讲解Java 23种设计模式,告别传统"Hello World"式教学。文章首先指出常见代码问题(如违反开闭原则、单一职责),然后分类详解创建型(单例、工厂等)、行为型(策略、观察者等)、结构型(代理、装饰器等)模式在订单系统中的应用场景,每个模式都配有可运行的业务代码示例。特别强调模式解决的实际问题(如订单审批流使用责任链模式、支付方式切换使用策略模式),并对比不同实现方式的优缺点(如5种单例模式实现)。最后提供设计原则对照、易混淆模式对比及Spring框架中的设计模式应用。

weixin_50870268的博客 561

c++总结(持续更新中)

1、c++的默认继承方式为private。

多看多听多总结 463
上一篇: ICE 协议概要
下一篇: Ruby 1.9.1+Rails 2.3.2+ActiveScaffold 1.2RC1 编码问题
domeme
博客等级 码龄23年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值