迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 編程環(huán)境中非常常用的設(shè)計模式。這種模式用于順序訪問集合對象的元素艰额,不需要知道集合對象的底層表示澄港。

迭代器模式屬于行為型模式。

介紹

意圖:提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內(nèi)部表示柄沮。

主要解決:不同的方式來遍歷整個整合對象慢睡。

何時使用:遍歷一個聚合對象逐工。

如何解決:把在元素之間游走的責(zé)任交給迭代器,而不是聚合對象漂辐。

關(guān)鍵代碼:定義接口:hasNext, next。

應(yīng)用實例:JAVA 中的 iterator棕硫。

優(yōu)點(diǎn):?1髓涯、它支持以不同的方式遍歷一個聚合對象。 2哈扮、迭代器簡化了聚合類纬纪。 3、在同一個聚合上可以有多個遍歷滑肉。 4包各、在迭代器模式中,增加新的聚合類和迭代器類都很方便靶庙,無須修改原有代碼问畅。

缺點(diǎn):由于迭代器模式將存儲數(shù)據(jù)和遍歷數(shù)據(jù)的職責(zé)分離,增加新的聚合類需要對應(yīng)增加新的迭代器類六荒,類的個數(shù)成對增加护姆,這在一定程度上增加了系統(tǒng)的復(fù)雜性。

使用場景:?1掏击、訪問一個聚合對象的內(nèi)容而無須暴露它的內(nèi)部表示卵皂。 2、需要為聚合對象提供多種遍歷方式砚亭。 3灯变、為遍歷不同的聚合結(jié)構(gòu)提供一個統(tǒng)一的接口。

注意事項:迭代器模式就是分離了集合對象的遍歷行為捅膘,抽象出一個迭代器類來負(fù)責(zé)添祸,這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明地訪問集合內(nèi)部的數(shù)據(jù)篓跛。

實現(xiàn)

我們將創(chuàng)建一個敘述導(dǎo)航方法的?Iterator?接口和一個返回迭代器的?Container?接口膝捞。實現(xiàn)了?Container?接口的實體類將負(fù)責(zé)實現(xiàn)?Iterator?接口。

IteratorPatternDemo愧沟,我們的演示類使用實體類?NamesRepository?來打印?NamesRepository?中存儲為集合的?Names蔬咬。

步驟 1

創(chuàng)建接口:

Iterator.java

public interface Iterator {

? public boolean hasNext();

? public Object next();}

Container.java

public interface Container {

? public Iterator getIterator();

}

步驟 2

創(chuàng)建實現(xiàn)了?Container?接口的實體類。該類有實現(xiàn)了?Iterator?接口的內(nèi)部類?NameIterator沐寺。

NameRepository.java

public class NameRepository implements Container {

? public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

? @Override

? public Iterator getIterator() {

? ? ? return new NameIterator();

? }

? private class NameIterator implements Iterator {

? ? ? int index;

? ? ? @Override?

?? ? public boolean hasNext() {

? ? ? ? if(index < names.length){?

?? ? ? ? ? return true;

? ? ? ? }?

?? ? ? return false;

? ? ? }

? ? ? @Override

? ? ? public Object next() {?

?? ? ? if(this.hasNext()){

? ? ? ? ? ? return names[index++];

? ? ? ? }

? ? ? ? return null;

? ? ? }? ?

? }

}

步驟 3

使用?NameRepository?來獲取迭代器林艘,并打印名字。

IteratorPatternDemo.java

public class IteratorPatternDemo {?

? public static void main(String[] args) {

? ? ? NameRepository namesRepository = new NameRepository();

? ? ? for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){?

?? ? ? String name = (String)iter.next();

? ? ? ? System.out.println("Name : " + name);

? ? ? }?

? }

}

步驟 4

執(zhí)行程序混坞,輸出結(jié)果:

Name : RobertName : JohnName : JulieName : Lora

本文轉(zhuǎn)載:https://www.runoob.com/design-pattern/design-pattern-intro.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐援,一起剝皮案震驚了整個濱河市钢坦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啥酱,老刑警劉巖爹凹,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異镶殷,居然都是意外死亡禾酱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門绘趋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颤陶,“玉大人,你說我怎么就攤上這事陷遮∽易撸” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵帽馋,是天一觀的道長搅方。 經(jīng)常有香客問我,道長茬斧,這世上最難降的妖魔是什么腰懂? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮项秉,結(jié)果婚禮上绣溜,老公的妹妹穿的比我還像新娘。我一直安慰自己娄蔼,他們只是感情好怖喻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岁诉,像睡著了一般锚沸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涕癣,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天哗蜈,我揣著相機(jī)與錄音,去河邊找鬼坠韩。 笑死距潘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的只搁。 我是一名探鬼主播音比,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氢惋!你這毒婦竟也來了洞翩?” 一聲冷哼從身側(cè)響起稽犁,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骚亿,沒想到半個月后已亥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡来屠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年陷猫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片的妖。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖足陨,靈堂內(nèi)的尸體忽然破棺而出嫂粟,到底是詐尸還是另有隱情,我是刑警寧澤墨缘,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布星虹,位于F島的核電站,受9級特大地震影響镊讼,放射性物質(zhì)發(fā)生泄漏宽涌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一蝶棋、第九天 我趴在偏房一處隱蔽的房頂上張望卸亮。 院中可真熱鬧,春花似錦玩裙、人聲如沸兼贸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溶诞。三九已至,卻和暖如春决侈,著一層夾襖步出監(jiān)牢的瞬間螺垢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工赖歌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枉圃,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓俏站,卻偏偏與公主長得像讯蒲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肄扎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

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

  • 1 場景問題# 1.1 工資表數(shù)據(jù)的整合## 考慮這樣一個實際應(yīng)用:整合工資表數(shù)據(jù)墨林。 這個項目的背景是這樣的赁酝,項目...
    七寸知架構(gòu)閱讀 2,557評論 0 53
  • 【學(xué)習(xí)難度:★★★☆☆,使用頻率:★★★★★】直接出處:迭代器模式梳理和學(xué)習(xí):https://github.com...
    BruceOuyang閱讀 1,318評論 2 1
  • 迭代器模式 迭代器模式用于順序訪問集合對象的元素旭等,不需要知道集合對象的底層表示酌呆,屬于行為型模式。 介紹 作用: 提...
    n油炸小朋友閱讀 205評論 0 0
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是迭代器模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 優(yōu)點(diǎn)和缺點(diǎn) 適用環(huán)境 模式應(yīng)用 一...
    w1992wishes閱讀 520評論 0 1
  • 轉(zhuǎn)眼間搔耕,時光飛逝隙袁。在不慌不忙的平凡中,梓玉升入初中弃榨。 這一次菩收,林梓玉不負(fù)眾望的考上了本市重點(diǎn)中學(xué)。媽媽開心的獎勵了...
    靈魂搜索者閱讀 101評論 0 0