Iterator——迭代器模式

迭代器模式介紹

迭代器模式又稱(chēng)為游標(biāo)模式蝎抽。是行為設(shè)計(jì)模式之一。

迭代器模式的定義

它提供一種方法順序訪問(wèn)一個(gè)容器對(duì)象中的各個(gè)元素路克,而又不需要暴露該對(duì)象的內(nèi)部表示樟结。

迭代器模式中的角色

  • Iterator(迭代器)
    該角色負(fù)責(zé)定義按順序逐個(gè)遍歷元素的接口(API)。一般定義一個(gè)返回Iterator的函數(shù)精算。
  • ConcreteIterator(具體的迭代器)
    該角色負(fù)責(zé)實(shí)現(xiàn)Iterator所定義的接口瓢宦。
  • Aggregate(集合)
    該角色負(fù)責(zé)定義創(chuàng)建Iterator的接口(API)。
  • ConcreteAggregate(具體的集合)
    該角色負(fù)責(zé)實(shí)現(xiàn)Aggregat角色所定義的接口殖妇。

擴(kuò)展思路要點(diǎn)

  • 不管實(shí)現(xiàn)如何變化,都可以使用Iterator刁笙。
    為什么一定要考慮引入Iterator呢?如果是數(shù)組/集合,直接for循環(huán)語(yǔ)句進(jìn)行遍歷處理不就可以了嗎谦趣?為什么要在集合之外引入Iterator這個(gè)角色呢疲吸?
    一個(gè)重要的理由是,引入Iterator后可以將遍歷與實(shí)現(xiàn)分離開(kāi)來(lái)前鹅≌玻可以看下面的代碼。
    while(it.hasNext()) { Book book = it.next(); }
    這里只使用了Iterator的hasNext方法和next方法舰绘,并沒(méi)有調(diào)用 具體集合的方法蹂喻。也就是說(shuō),這里的while循環(huán)不依賴(lài)具體集合的實(shí)現(xiàn)捂寿。
  • 難以理解抽象類(lèi)和接口
    很難理解抽象類(lèi)和接口的人常常使用ConcreteAggregate角色和ConcreteIterator角色編程 ,而不使用Aggregate接口和Iterator接口,他們總想使用具體的類(lèi)來(lái)解決所有問(wèn)題口四。(我就是這樣啊G芈B省!)
    如果只是用具體的類(lèi)來(lái)解決問(wèn)題驳概,很容易導(dǎo)致類(lèi)之間的強(qiáng)耦合赤嚼,這些類(lèi)也難以作為組件被再次利用。為了弱化類(lèi)之間的耦合顺又,進(jìn)而使得類(lèi)更加容易作為組件被再次利用更卒,我們需要引入抽象類(lèi)和接口。
    切記"不要使用具體類(lèi)來(lái)編程稚照,要優(yōu)先使用抽象類(lèi)和接口來(lái)編程"蹂空。
  • 容易弄錯(cuò)的下一個(gè)
    在Iterator模式的實(shí)現(xiàn)中俯萌,很容易弄錯(cuò)next()。該方法返回的返回值到底是當(dāng)前元素還是下一個(gè)元素上枕?绳瘟?更詳細(xì)的說(shuō),next方法的名字應(yīng)該是下面這樣的:
    return CurrentElementAndAdvanceToNextPosition
    也就是說(shuō),next方法是"返回當(dāng)前的元素,并指向下一個(gè)元素"姿骏。同理hasNext則表示接下來(lái)是否可以調(diào)用next方法。
Iterator模式類(lèi)圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斤彼,一起剝皮案震驚了整個(gè)濱河市分瘦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琉苇,老刑警劉巖嘲玫,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異并扇,居然都是意外死亡去团,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén)穷蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)土陪,“玉大人,你說(shuō)我怎么就攤上這事肴熏」砣福” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵蛙吏,是天一觀的道長(zhǎng)源哩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鸦做,這世上最難降的妖魔是什么励烦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮泼诱,結(jié)果婚禮上坛掠,老公的妹妹穿的比我還像新娘。我一直安慰自己坷檩,他們只是感情好却音,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著矢炼,像睡著了一般系瓢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上句灌,一...
    開(kāi)封第一講書(shū)人閱讀 52,874評(píng)論 1 314
  • 那天夷陋,我揣著相機(jī)與錄音欠拾,去河邊找鬼。 笑死骗绕,一個(gè)胖子當(dāng)著我的面吹牛藐窄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酬土,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荆忍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撤缴?” 一聲冷哼從身側(cè)響起刹枉,我...
    開(kāi)封第一講書(shū)人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屈呕,沒(méi)想到半個(gè)月后微宝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虎眨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年蟋软,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗽桩。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岳守,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涤躲,到底是詐尸還是另有隱情棺耍,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布种樱,位于F島的核電站蒙袍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫩挤。R本人自食惡果不足惜害幅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岂昭。 院中可真熱鬧以现,春花似錦、人聲如沸约啊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恰矩。三九已至记盒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間外傅,已是汗流浹背纪吮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工俩檬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碾盟。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓棚辽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親冰肴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屈藐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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

  • 1 場(chǎng)景問(wèn)題# 1.1 工資表數(shù)據(jù)的整合## 考慮這樣一個(gè)實(shí)際應(yīng)用:整合工資表數(shù)據(jù)。 這個(gè)項(xiàng)目的背景是這樣的熙尉,項(xiàng)目...
    七寸知架構(gòu)閱讀 2,557評(píng)論 0 53
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法估盘,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法骡尽,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法擅编,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,669評(píng)論 18 399
  • 一.集合框架 1.集合框架(對(duì)象數(shù)組的概述和使用) a.案例演示 * 需求:我有5個(gè)學(xué)生攀细,請(qǐng)把這個(gè)5個(gè)學(xué)生的信息存...
    夢(mèng)游的沙師弟閱讀 551評(píng)論 0 1
  • somthing for nothing.《龍族》里有這么一段話,但人就是這樣爱态,得不到的永遠(yuǎn)是最好的谭贪。真正擁有的時(shí)...
    盡風(fēng)閱讀 811評(píng)論 0 1
  • 當(dāng)你抬頭望見(jiàn)清晨的第一縷朝陽(yáng),當(dāng)你淺淺走過(guò)斑駁的樹(shù)影锦担,當(dāng)你在長(zhǎng)燈下靜靜地理著思緒俭识,你是否留意你的影子,像個(gè)忠實(shí)的伙...
    淮師大統(tǒng)計(jì)xusimin閱讀 741評(píng)論 0 1