使用和滥用迭代器模式
时间:2012-6-11
迭代器是一个最常用同时也是最有用的模式,然而它隐藏的暗礁容易使粗心的大犯错,其中最主要的危险在于当你迭代一个对象聚合时,这个聚合发生了改变,你怎么办呢?设想你正在线性地遍历一个清单,而正当你刚刚来到其中第三个元素的时候,突然有人将那个元素从清单中删除了。那彼办呢?是让这个迭代器提供给你那个已经不存在的第三个元素?还是让迭代器忽略这个变化并跳转到第四个元素就当做什么都没有发生呢?还是让它抛出一个异常呢?
很不幸,在本章中我们所构建的这些迭代器没有一个能很好地处理这个问题,加快一下我们的外部arryiterator,它通过当前对象的索引来工作。因此,虽然从数组中删除了一个我们还没有遍历到的元素,可是对它来说并不是一个问题,但是如果修改了已经遍历过的当前索引之前的元素,这将导致出现很大的问题。