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

作者:千絕

郵箱:[email protected]

公衆號:千絕

標題:設計模式之迭代器模式(轉載請標明出處)

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

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

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

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

定義

首先慣例我們引用百度百科的內容

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

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

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

代碼

定義一個迭代器的接口

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

定義一個實現迭代器的類

public class ConcreateIterator<T> implements Iterator<T> {
    List<T> list ;
    int current =0;
    public ConcreateIterator(List<T> 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);
    }
}

定義一個聚合接口

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

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

public class ConcreateAggregate<T> implements Aggregate<T> {
    private List<T> 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);
    }
}

定義一個測試類

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());
        }
    }
}

在這裏插入圖片描述

總結

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

下期預告:原型模式。

如果有喜歡千絕的可以關注、評論、轉發一下。

最後你們覺得新房應該入手什麼智能家居能提高生活品質呢。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章