第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

結(jié)合案例深入解析迭代器模式

標(biāo)簽:
Java

一、基本概念

迭代器模式属于行为型模式。

这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

如果我们需要统一遍历不同的集合(容器),也可以利用迭代器模式解决(下面的案例就是解决这个问题)。

二、结构

结构:


5d08942d0001918504920416.jpg


  • Container 是聚合类,其中 getIterator() 方法可以产生一个 Iterator

  • Iterator 主要定义了 hasNext() 和 next() 方法;

  • 每一个Container的实现类都会有一个具体的Iterator实现类来帮助实现迭代;

三、案例

实现两个容器能够统一遍历。(或者两个以上)

先看代码结构: (这里我将两个迭代器实现类写在两个容器内部)


5d08942d000137d503220107.jpg


代码:

public interface Container {
    Iterator getIterator();
}
public interface Iterator<E> {
    boolean hasNext();
    E next();
}

两个容器类,他们内部的容器不同,内部有自带不同的迭代器:

public class ConcreteContainer1 implements Container {

    public Integer[] arr;

    public ConcreteContainer1() {
        arr = new Integer[10];
        for(int i = 0; i < 10; i++) arr[i] = i;
    }

    @Override
    public Iterator getIterator() {
        return new ConcreteIterator1<Integer>();
    }

    private class ConcreteIterator1<E> implements Iterator{

        int index;

        @Override
        public boolean hasNext() {
            if(index < arr.length)
                return true;
            return false;
        }

        @Override
        public Object next() {
            if(hasNext())
                return arr[index++];
            return null;
        }
    }
}
public class ConcreteContainer2 implements Container {

    public ArrayList arr;

    public ConcreteContainer2() {
        arr = new ArrayList();
        for(int i = 0; i < 10; i++) arr.add(i);
    }

    @Override
    public Iterator getIterator() {
        return new ConcreteIterator1<Integer>();
    }

    private class ConcreteIterator1<E> implements Iterator{

        int index;

        @Override
        public boolean hasNext() {
            if(index < arr.size())
                return true;
            return false;
        }

        @Override
        public Object next() {
            if(hasNext())
                return arr.get(index++);
            return null;
        }
    }
}

测试:

// 如果不这么做,需要区分c1和c2的遍历方式, 一个是数组,一个是List
public class MyTest {

    public static void main(String[] args){
        Container c1 = new ConcreteContainer1();
        Container c2 = new ConcreteContainer2();

        ArrayList<Iterator>its = new ArrayList<>();
        its.add(c1.getIterator()); // 将c1迭代器加入its
        its.add(c2.getIterator()); // 将c1迭代器加入its

        // 实现了统一遍历, 只需要将迭代器加入到 its中即可
        for(Iterator it : its) {
            while(it.hasNext())
                System.out.print( it.next() + " ");
            System.out.println();
        }
    }
}

输出:

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9

四、总结

优点:

  • 在同一个聚合上可以有多个遍历;

  • 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码;


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消