2008-02-29
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通常是想让访问独立于特定的集合类,提供一个统一的访问接口。
Iterator和visitor模式都是对对象聚集进行访问,并对访问的元素进行操作,
它们都是把访问的职责从集合\元素类中分离出来。
但Iterator在遍历集合、树形结构时,往往只是遍历元素,而对元素的
操作通常在其职责之外,并且在一个遍历过程外在的对元素操作通常是单一的
至少不会是每个元素一种不同的操作(否则需要大量的if...else判断),而
visitor模式则通常是遍历的同时对元素进行操作,而这种操作在一次遍历过程中
可以对不同元素进行专门的定制。
所以Iterator和visitor的使用情形是显然的:
仅仅对元素进行遍历,遍历过程不需要对每一种元素的操作特别的定制时使用Iterator,
而如果需要对每个元素进行特别的定制时,使用visitor模式。
visitor模式通常耦合性要比Iterator,集合类、元素需要知道visitor的存在,并实现
accept方法,visitor通常需要直接暴露元素类的数据成员,这破坏面向对象的封装性。
visitor模式最常出现的场合是composite模式出现的时候,二者经常形影不离。
Iterator通常是想让访问独立于特定的集合类,提供一个统一的访问接口。
- 15:13
- 浏览 (157)
- 评论 (0)
- 分类: Design Pattern
- 相关推荐
发表评论
- 浏览: 51479 次
- 性别:

- 来自: 长春

- 详细资料
搜索本博客
我的相册
RSS Reader1
共 6 张
共 6 张
链接
最新评论
-
写了一个支持搜索并下载歌 ...
引用 为什么要配置成legal_music_link=http://202.10 ...
-- by fuliang -
使用Struts2+Hibernate+Sp ...
很好很强大
-- by andy54321 -
Java Persistence with Hi ...
昨天买的, 不错
-- by lklkdawei -
使用Struts2+Spring+Hiber ...
不过整个工程都没有一条注释啊。。。 这个比较郁闷,万一以后你写了个框架,那下面 ...
-- by yyphzc -
使用Struts2+Spring+Hiber ...
总体感觉还行,不过部分代码需要优化为好 1.DAO既然使用泛型,那就干脆点。想想 ...
-- by yeshucheng






评论排行榜