Yet another Iterator VS visitor

在论坛中有好几位同学都比较了Iterator和visitor模式,我也小小总结一下:
Iterator和visitor模式都是对对象聚集进行访问,并对访问的元素进行操作,
它们都是把访问的职责从集合\元素类中分离出来。
但Iterator在遍历集合、树形结构时,往往只是遍历元素,而对元素的
操作通常在其职责之外,并且在一个遍历过程外在的对元素操作通常是单一的
至少不会是每个元素一种不同的操作(否则需要大量的if...else判断),而
visitor模式则通常是遍历的同时对元素进行操作,而这种操作在一次遍历过程中
可以对不同元素进行专门的定制。
所以Iterator和visitor的使用情形是显然的:
仅仅对元素进行遍历,遍历过程不需要对每一种元素的操作特别的定制时使用Iterator,
而如果需要对每个元素进行特别的定制时,使用visitor模式。
visitor模式通常耦合性要比Iterator,集合类、元素需要知道visitor的存在,并实现
accept方法,visitor通常需要直接暴露元素类的数据成员,这破坏面向对象的封装性。
visitor模式最常出现的场合是composite模式出现的时候,二者经常形影不离。
Iterator通常是想让访问独立于特定的集合类,提供一个统一的访问接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值