迭代器模式:提供一種方法訪問一個容器對象中各個元素,而又不暴露該對象的內(nèi)部細(xì)節(jié)睡腿。
迭代器角色(Iterator):定義遍歷元素所需要的方法,一般來說會有這么三個方法:取得下一個元素的方法next()峻贮,判斷是否遍歷結(jié)束的方法hasNext())席怪,移出當(dāng)前對象的方法remove()。
容器角色(Aggregate): ?一般是一個接口纤控,提供一個iterator()方法挂捻,例如java中的Collection接口,List接口船万,Set接口等刻撒。
具體迭代器角色(Concrete Iterator):實現(xiàn)迭代器接口中定義的方法,完成集合的迭代耿导。
具體容器角色(ConcreteAggregate):就是抽象容器的具體實現(xiàn)類声怔,比如List接口的有序列表實現(xiàn)ArrayList,List接口的鏈表實現(xiàn)LinkList舱呻,Set接口的哈希列表的實現(xiàn)HashSet等捧搞。
迭代器模式的優(yōu)點有:1、簡化了遍歷方式狮荔,對于對象集合的遍歷,還是比較麻煩的介粘,對于數(shù)組或者有序列表殖氏,我們尚可以通過游標(biāo)來取得,但用戶需要在對集合了解很清楚的前提下姻采,自行遍歷對象雅采,但是對于hash表來說,用戶遍歷起來就比較麻煩了慨亲。而引入了迭代器方法后婚瓜,用戶用起來就簡單的多了。
2刑棵、可以提供多種遍歷方式巴刻,比如說對有序列表,我們可以根據(jù)需要提供正序遍歷蛉签,倒序遍歷兩種迭代器胡陪,用戶用起來只需要得到我們實現(xiàn)好的迭代器沥寥,就可以方便的對集合進行遍歷了。
3柠座、封裝性良好邑雅,用戶只需要得到迭代器就可以遍歷,而對于遍歷算法則不用去關(guān)心妈经。
迭代器模式的缺點:對于比較簡單的遍歷(像數(shù)組或者有序列表)淮野,使用迭代器方式遍歷較為繁瑣,大家可能都有感覺吹泡,像ArrayList骤星,我們寧可愿意使用for循環(huán)和get方法來遍歷集合。
迭代器模式的適用場景:迭代器模式是與集合共生共死的荞胡,一般來說妈踊,我們只要實現(xiàn)一個集合,就需要同時提供這個集合的迭代器泪漂,就像java中的Collection廊营,List、Set萝勤、Map等露筒,這些集合都有自己的迭代器。假如我們要實現(xiàn)一個這樣的新的容器敌卓,當(dāng)然也需要引入迭代器模式慎式,給我們的容器實現(xiàn)一個迭代器。但是趟径,由于容器與迭代器的關(guān)系太密切了瘪吏,所以大多數(shù)語言在實現(xiàn)容器的時候都給提供了迭代器,并且這些語言提供的容器和迭代器在絕大多數(shù)情況下就可以滿足我們的需要蜗巧,所以現(xiàn)在需要我們自己去實踐迭代器模式的場景還是比較少見的掌眠,我們只需要使用語言中已有的容器和迭代器就可以了。