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
- 浏览 (278)
- 评论 (0)
- 分类: Design Pattern
- 相关推荐
发表评论
- 浏览: 79552 次
- 性别:

- 来自: 长春

- 详细资料
搜索本博客
我的相册
spy
共 7 张
共 7 张
最近加入圈子
链接
最新评论
-
使用Struts2+Spring+Hiber ...
谢谢你的代码 我是一个初学者 ,没有什么资格说什么. 感谢.
-- by huobao89 -
学SSH2时写的入门例子
塔破铁鞋无觅处 谢谢了!
-- by songzhiyou -
Berkely DB Java Edition ...
bu cuo
-- by zhaoshuli99 -
搜索引擎Nutch源代码研究 ...
万分感谢你,太有用了!!
-- by laomosan -
使用Struts2+Spring+Hiber ...
源码有些问题, 麻烦给songDaoImpl 到源码贴出来好吗。
-- by cloud21






评论排行榜