程序員:我終於知道什麼是迭代器模式了


程序員:我終於知道什麼是迭代器模式了

Hello,各位看官老爺們,千絕我回來更新了,最近發生了一件人生大事,導致了我鴿了一個星期,就是千絕看了一週的房,終於靠自己的努力讓我的家人幫我買房了(hahaha)相信在座的各位看官老爺們也可以。

好了不開玩笑了,因為千絕年底要結婚了,所以趁現在就去看了一下婚房,我感覺我買房效率還是挺快的,估計遇到我的銷售都開心的飛了,我週四晚上聯繫的房屋銷售,週六上午看的房,下午就把首付交了。我媳婦都說節奏太快了,我也感覺節奏挺快的,就這樣當了韭菜被房子綁住了,以後再也不能想吃啥就吃啥了,從此背上了房貸。

好了現在迴歸正題(文末有彩蛋),前面一篇千絕介紹了觀察者模式,不知道各位看官老爺看的怎麼樣,有沒有對觀察者模式又有了一點新的認識呢,如果有的話那麼千絕的目的就達到了,這篇千絕將會介紹設計模式中的迭代器模式,雖然這個模式現在我們大概率不會自己寫了,因為java已經做的非常的完善了,但是有一句古話說的好,學習歷史,看清方向我們才能更好的前行。

這篇文章千絕會通過一個例子來講解什麼是迭代器模式。

定義

迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。

千絕對這段定義的理解就是:迭代器模式是為了不暴露對象內部使用的是什麼數據結構,讓外部可以順序訪問對象內部元素的方法

理解還是能理解的,如果不能理解上面的話,千絕會用代碼來給你們講解。

代碼

定義一個迭代器的接口

<code>public interface Iterator {    //返回該對象的第一個元素    T first();    //返回該對象的下一個元素    T next();    //判斷該對象有沒有下一個元素    boolean hasNext();    //返回該對象現在的元素    T getCurrentObj();}/<code>

定義一個實現迭代器的類

<code>public class ConcreateIterator implements Iterator {    List list ;    int current =0;    public ConcreateIterator(List list){        this.list = list;    }    @Override    public T first() {        return list.get(0);    }    @Override    public T next() {        T t = null;        if(this.hasNext()){            t = list.get(current);            current ++ ;        }        return t;    }    @Override    public boolean hasNext() {        if(current < list.size()){            return  true;        }        return false;    }    @Override    public T getCurrentObj() {        return list.get(current);    }}/<code> 

定義一個聚合接口

<code>public  interface Aggregate {    //添加一個對象    void add(T t);    //刪除一個對象    void remove(T t);    //生成遍歷器    Iterator createIteratory();}/<code>

定義一個實現聚合接口的類

<code>public class ConcreateAggregate implements Aggregate {    private List list = new ArrayList();    @Override    public void add(T t) {        list.add(t);    }    @Override    public void remove(T t) {        list.remove(t);    }    @Override    public Iterator createIteratory() {        return new ConcreateIterator(list);    }}/<code>

定義一個測試類

<code>public class TestIterator {    public static void main(String []args){        ConcreateAggregate<string>  concreateAggregate= new ConcreateAggregate<string>();        concreateAggregate.add("測試");        concreateAggregate.add("測試1");        concreateAggregate.add("測試2");        concreateAggregate.add("測試3");        concreateAggregate.add("測試4");        concreateAggregate.add("測試5");        concreateAggregate.add("測試6");        concreateAggregate.remove("測試4");        Iterator iterator = concreateAggregate.createIteratory();        System.out.println("第一個是:" + iterator.first());        System.out.println("當前的元素是: " + iterator.getCurrentObj());        while(iterator.hasNext()){            System.out.println(iterator.next());        }    }}/<string>/<string>/<code>
程序員:我終於知道什麼是迭代器模式了

總結

看到這裡相信各位看官老爺們都覺得上面的代碼都很熟悉了吧,沒錯千絕是在參考jdk實現迭代器模式的例子,現在java對迭代器運用的已經很好了,我們現在基本上不用自己寫迭代器了,有可能是千絕現在寫的代碼還是太簡單,沒有遇到過自己寫迭代器的情況,所以介紹的有點粗糙還請各位看官老爺們不要介意。

原文鏈接:https://mp.weixin.qq.com/s/pXwdRiA1-QHSaaJEtDh6Tg


分享到:


相關文章: