迭代器模式

迭代器模式:提供一種方法訪問一個容器對象中各個元素,而又不暴露該對象的內(nèi)部細(xì)節(jié)睡腿。

迭代器模式


Iterator

迭代器角色(Iterator):定義遍歷元素所需要的方法,一般來說會有這么三個方法:取得下一個元素的方法next()峻贮,判斷是否遍歷結(jié)束的方法hasNext())席怪,移出當(dāng)前對象的方法remove()。


Aggregate

容器角色(Aggregate): ?一般是一個接口纤控,提供一個iterator()方法挂捻,例如java中的Collection接口,List接口船万,Set接口等刻撒。


Concrete Iterator

具體迭代器角色(Concrete Iterator):實現(xiàn)迭代器接口中定義的方法,完成集合的迭代耿导。


ConcreteAggregate

具體容器角色(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)在需要我們自己去實踐迭代器模式的場景還是比較少見的掌眠,我們只需要使用語言中已有的容器和迭代器就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幕屹,一起剝皮案震驚了整個濱河市蓝丙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌望拖,老刑警劉巖渺尘,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異说敏,居然都是意外死亡鸥跟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門盔沫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锌雀,“玉大人蚂夕,你說我怎么就攤上這事∫改妫” “怎么了婿牍?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惩歉。 經(jīng)常有香客問我等脂,道長,這世上最難降的妖魔是什么撑蚌? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任上遥,我火速辦了婚禮,結(jié)果婚禮上争涌,老公的妹妹穿的比我還像新娘粉楚。我一直安慰自己,他們只是感情好亮垫,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布模软。 她就那樣靜靜地躺著,像睡著了一般饮潦。 火紅的嫁衣襯著肌膚如雪燃异。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天继蜡,我揣著相機與錄音回俐,去河邊找鬼。 笑死稀并,一個胖子當(dāng)著我的面吹牛仅颇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碘举,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼忘瓦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了殴俱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤枚抵,失蹤者是張志新(化名)和其女友劉穎线欲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汽摹,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡李丰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逼泣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趴泌。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡舟舒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗜憔,到底是詐尸還是另有隱情秃励,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布吉捶,位于F島的核電站夺鲜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呐舔。R本人自食惡果不足惜币励,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珊拼。 院中可真熱鬧食呻,春花似錦、人聲如沸澎现。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昔头。三九已至饼问,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揭斧,已是汗流浹背莱革。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讹开,地道東北人盅视。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像旦万,于是被迫代替她去往敵國和親闹击。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 工資表數(shù)據(jù)的整合## 考慮這樣一個實際應(yīng)用:整合工資表數(shù)據(jù)成艘。 這個項目的背景是這樣的赏半,項目...
    七寸知架構(gòu)閱讀 2,557評論 0 53
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是迭代器模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 優(yōu)點和缺點 適用環(huán)境 模式應(yīng)用 一...
    w1992wishes閱讀 520評論 0 1
  • 定義 提供一種方式順序訪問一個容器對象中的各個元素,而又不需要暴露該對象的內(nèi)部結(jié)構(gòu)淆两; 在Java中使用最多的一種模...
    賈里閱讀 255評論 0 0
  • 概念:損失規(guī)避 得到的快樂其實并沒有辦法緩解失去的痛苦,心理學(xué)家把這種對損失更加敏感的底層心理狀態(tài)叫做損失規(guī)避。甚...
    Hesson閱讀 249評論 0 0
  • 一埃撵、insanity簡介 2014年9月接觸的insanity赵颅,其實很久以前就在一些文章里看到過,只是當(dāng)時沒有什么...
    樊雯婷閱讀 10,186評論 0 14