迭代器模式

模式定義

提供一種方法順序訪問一個聚合對象中的各種元素嗦明,而又不暴露該對象的內部表示库北。

模式結構

模式結構

Iterator:迭代器接口朴恳。定義訪問和遍歷元素的接口欺栗。

ConcreteIterator:具體的迭代器實現(xiàn)對象毫痕。實現(xiàn)對聚合對象的遍歷壳快,并跟蹤遍歷時的當前位置。

Aggregate:聚合對象镇草。定義創(chuàng)建相應迭代器對象的接口眶痰。

ConcreteAggregate:具體聚合對象。實現(xiàn)創(chuàng)建相應的迭代器對象梯啤。

代碼實現(xiàn)

public abstract class Aggregate {

    public abstract Iterator CreateIterator();
}

class ConcreteAggregate extends Aggregate {
    private String[] ss = null;

    public ConcreteAggregate(String[] ss) {
        this.ss = ss;
    }

    public Iterator CreateIterator() {
        return new ConcreteIterator(this);
    }

    public Object get(int index) {
        Object object = null;
        if (index < ss.length) {
            object = ss[index];
        }
        return object;
    }

    public int size() {
        return this.ss.length;
    }
}

public interface Iterator {
    public void first();
    public void next();
    public Object currentItem();
    public boolean idDone();
}

class ConcreteIterator implements Iterator {
    private int index = -1;
    private ConcreteAggregate aggregate;

    public ConcreteIterator(ConcreteAggregate aggregate) {
        this.aggregate = aggregate;
    }

    public void first() {
        index = 0;
    }

    public void next() {
        if (index < this.aggregate.size()) {
            index = index + 1;
        }
    }

    public Object currentItem() {
        return this.aggregate.get(index);
    }

    public boolean idDone() {
        if(index == this.aggregate.size()){
            return true;
        }
        return false;
    }
}

public class Client {
    public static void main(String[] args) {
        String[] names = {"1", "2", "3"};
        Aggregate aggregate = new ConcreteAggregate(names);
        Iterator iterator = aggregate.CreateIterator();
        iterator.first();
        while (!iterator.idDone()) {
            Object obj = iterator.currentItem();
            System.out.println(obj);
            iterator.next();
        }
    }
}

模式的優(yōu)缺點

優(yōu)點

  1. 它支持以不同的方式遍歷一個聚合對象竖伯。

  2. 迭代器簡化了聚合類。

  3. 在同一個聚合上可以有多個遍歷因宇。

  4. 在迭代器模式中七婴,增加新的聚合類和迭代器類都很方便,無須修改原有代碼察滑。

缺點

由于迭代器模式將存儲數(shù)據(jù)和遍歷數(shù)據(jù)的職責分離打厘,增加新的聚合類需要對應增加新的迭代器類,類的個數(shù)成對增加贺辰,這在一定程度上增加了系統(tǒng)的復雜性户盯。

思考

模式本質:控制訪問聚合對象中的元素。

開發(fā)中的應用場景

  1. 訪問一個聚合對象的內容而無須暴露它的內部表示饲化。

  2. 需要為聚合對象提供多種遍歷方式莽鸭。

  3. 為遍歷不同的聚合結構提供一個統(tǒng)一的接口。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吃靠,一起剝皮案震驚了整個濱河市硫眨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巢块,老刑警劉巖礁阁,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異族奢,居然都是意外死亡姥闭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門歹鱼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泣栈,“玉大人卜高,你說我怎么就攤上這事弥姻。” “怎么了掺涛?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵庭敦,是天一觀的道長。 經常有香客問我薪缆,道長秧廉,這世上最難降的妖魔是什么伞广? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮疼电,結果婚禮上嚼锄,老公的妹妹穿的比我還像新娘。我一直安慰自己蔽豺,他們只是感情好区丑,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著修陡,像睡著了一般沧侥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魄鸦,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天宴杀,我揣著相機與錄音,去河邊找鬼拾因。 笑死旺罢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的绢记。 我是一名探鬼主播主经,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庭惜!你這毒婦竟也來了罩驻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤护赊,失蹤者是張志新(化名)和其女友劉穎惠遏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骏啰,經...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡节吮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了判耕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透绩。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壁熄,靈堂內的尸體忽然破棺而出帚豪,到底是詐尸還是另有隱情,我是刑警寧澤草丧,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布狸臣,位于F島的核電站,受9級特大地震影響昌执,放射性物質發(fā)生泄漏烛亦。R本人自食惡果不足惜诈泼,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煤禽。 院中可真熱鬧铐达,春花似錦、人聲如沸檬果。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汁汗。三九已至衷畦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間知牌,已是汗流浹背祈争。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留角寸,地道東北人菩混。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像扁藕,于是被迫代替她去往敵國和親沮峡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容