09設(shè)計(jì)模式之迭代器模式

用處:集合的遍歷

先上類圖


迭代器模式.jpg

案例代碼

簡(jiǎn)單實(shí)現(xiàn)ArrayList 和 LinkList

package com.wwj.iteartormode;

public class Main {
    public static void main(String[] args) {
        Collection_<String> test = new ArrayList_();
        test.add("1");
        test.add("2");
        test.add("3");
        Iteartor_ iteartor = test.iteartor();
        while (iteartor.hasNext()){
            System.out.println(iteartor.next());
        }

        Collection_<String> test2 = new LinkList_();
        test2.add("4");
        test2.add("5");
        test2.add("6");
        Iteartor_ iteartor2 = test2.iteartor();
        while (iteartor2.hasNext()){
            System.out.println(iteartor2.next());
        }

    }
}

/**
 * 集合接口
 */
interface Collection_<T>{
    void add(T o);
    int size();
    Iteartor_ iteartor();
}

/**
 * 遍歷器
 */
interface Iteartor_{
    Boolean hasNext();
    Object next();
}

/**
 * 自定義ArrayList練習(xí)
 */
class ArrayList_<T> implements Collection_<T>{
    Object[] objects = new Object[10];
    private int index = 0;

    @Override
    public void add(T o){
        if(index == objects.length){
            Object[] newObjects = new Object[objects.length*2];
            System.arraycopy(objects,0,newObjects,0,objects.length);
            objects = newObjects;
        }
        objects[index] = o;
        index++;
    }

    @Override
    public int size(){
        return this.index;
    }

    @Override
    public Iteartor_ iteartor() {
        return new ArrayListIteartor();
    }

    /**
     * 定義自己的迭代器
     */
    private class ArrayListIteartor implements Iteartor_{

        private int currentIndex = 0;

        @Override
        public Boolean hasNext() {
            if(currentIndex >= index){
                return false;
            }
            return true;
        }

        @Override
        public T next() {
            Object object = objects[currentIndex];
            currentIndex++;
            return (T)object;
        }
    }
}

/**
 * 簡(jiǎn)單實(shí)現(xiàn)LinkList
 */
class LinkList_<T> implements Collection_<T>{
    Node head;
    Node tail;
    private int size = 0;

    @Override
    public void add(T o) {
        Node n = new Node(o);
        if(head == null){
            head = n;
        }else{
            tail.next = n;
        }
        tail = n;
        size++;
    }

    @Override
    public int size() {
        return this.size;
    }

    @Override
    public Iteartor_ iteartor() {
        return new LinkListIteartor();
    }

    /**
     * 定義node節(jié)點(diǎn)
     */
    protected class Node{
        private T object;
        Node next;

        public Node(T object) {
            this.object = object;
        }
    }

    /**
     * 定義自己的迭代器
     */
    private class LinkListIteartor implements Iteartor_{
        private int currentIndex = 0;
        private Node currentNode;

        @Override
        public Boolean hasNext() {
            if(currentIndex >= size){
                return false;
            }
            return true;
        }

        @Override
        public T next() {
            if (currentNode == null){
                currentNode = head;
            }else {
                currentNode = currentNode.next;
            }
            currentIndex++;
            return currentNode.object;
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毙驯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妖混,老刑警劉巖爆雹,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠说,死亡現(xiàn)場(chǎng)離奇詭異近速,居然都是意外死亡扭屁,警方通過(guò)查閱死者的電腦和手機(jī)低缩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)嘉冒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人咆繁,你說(shuō)我怎么就攤上這事讳推。” “怎么了玩般?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵银觅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坏为,道長(zhǎng)究驴,這世上最難降的妖魔是什么镊绪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮纳胧,結(jié)果婚禮上镰吆,老公的妹妹穿的比我還像新娘。我一直安慰自己跑慕,他們只是感情好万皿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著核行,像睡著了一般牢硅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芝雪,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天减余,我揣著相機(jī)與錄音,去河邊找鬼惩系。 笑死位岔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堡牡。 我是一名探鬼主播抒抬,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晤柄!你這毒婦竟也來(lái)了擦剑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芥颈,失蹤者是張志新(化名)和其女友劉穎惠勒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體爬坑,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纠屋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妇垢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巾遭。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闯估,靈堂內(nèi)的尸體忽然破棺而出灼舍,到底是詐尸還是另有隱情,我是刑警寧澤涨薪,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布骑素,位于F島的核電站,受9級(jí)特大地震影響刚夺,放射性物質(zhì)發(fā)生泄漏献丑。R本人自食惡果不足惜末捣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望创橄。 院中可真熱鬧箩做,春花似錦、人聲如沸妥畏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)醉蚁。三九已至燃辖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間网棍,已是汗流浹背黔龟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滥玷,地道東北人氏身。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惑畴,于是被迫代替她去往敵國(guó)和親观谦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 定義 一種最簡(jiǎn)單也最常見(jiàn)的設(shè)計(jì)模式桨菜。它可以讓用戶透過(guò)特定的接口巡訪容器中的每一個(gè)元素而不用了解底層的實(shí)現(xiàn)。讓你能在...
    程序員札記閱讀 323評(píng)論 1 3
  • 1.迭代器模式介紹 迭代器模式:提供一種方法順序的訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素捉偏,而又不暴露該對(duì)象的內(nèi)部表示倒得。 2.迭...
    smallmartial閱讀 233評(píng)論 0 1
  • 迭代器模式 定義 提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素, 而又無(wú)須暴露該對(duì)象的內(nèi)部表示。 模式結(jié)構(gòu) 1.抽象...
    阿博聊編程閱讀 146評(píng)論 0 1
  • 1. 定義 提供一種方法訪問(wèn)一個(gè)容器對(duì)象中各個(gè)元素夭禽,而又不暴露該對(duì)象的內(nèi)部細(xì)節(jié)霞掺。 2. 作用 在遍歷集合的時(shí)候,把...
    落英墜露閱讀 228評(píng)論 3 0
  • 迭代器是針對(duì)集合對(duì)象而生的讹躯,對(duì)于集合對(duì)象而言菩彬,必然涉及到集合元素的添加刪除操作,同時(shí)也肯定支持遍歷集合元素的操作潮梯,...
    墨雨軒夏閱讀 474評(píng)論 0 9