使用和濫用迭代器模式
作者:佚名 時(shí)間:2012-06-11 分享到:
迭代器是一個(gè)最常用同時(shí)也是最有用的模式,然而它隱藏的暗礁容易使粗心的大犯錯(cuò),其中最主要的危險(xiǎn)在于當(dāng)你迭代一個(gè)對象聚合時(shí),這個(gè)聚合發(fā)生了改變,你怎么辦呢?設(shè)想你正在線性地遍歷一個(gè)清單,而正當(dāng)你剛剛來到其中第三個(gè)元素的時(shí)候,突然有人將那個(gè)元素從清單中刪除了。那彼辦呢?是讓這個(gè)迭代器提供給你那個(gè)已經(jīng)不存在的第三個(gè)元素?還是讓迭代器忽略這個(gè)變化并跳轉(zhuǎn)到第四個(gè)元素就當(dāng)做什么都沒有發(fā)生呢?還是讓它拋出一個(gè)異常呢?
很不幸,在本章中我們所構(gòu)建的這些迭代器沒有一個(gè)能很好地處理這個(gè)問題,加快一下我們的外部arryiterator,它通過當(dāng)前對象的索引來工作。因此,雖然從數(shù)組中刪除了一個(gè)我們還沒有遍歷到的元素,可是對它來說并不是一個(gè)問題,但是如果修改了已經(jīng)遍歷過的當(dāng)前索引之前的元素,這將導(dǎo)致出現(xiàn)很大的問題。