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优越的地方。