《Android源碼設計模式解析與實戰》讀書筆記之第十四章 ——迭代器模式

目錄

1. 迭代器模式的定義

2. 迭代器模式的使用場景

3. UML圖與實例代碼

4. 迭代器模式在Android中的應用


1. 迭代器模式的定義

提供一種方法順序訪問一個容器中的各個對象,而又不需要暴露對象的內部表示

2. 迭代器模式的使用場景

遍歷一個容器對象時

3. UML圖與實例代碼

實例代碼

public class IteratorPattern {
    public static void main(String[] args) {
        Aggregate aggregate = new ConcreteAggregate();
        aggregate.add("小明");
        aggregate.add("小紅");
        aggregate.add("小剛");
        Iterator iterator = aggregate.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

// 容器
interface Aggregate {
    public void add(Object object);
    public void remove(Object object);
    public Iterator iterator();
}

class ConcreteAggregate implements Aggregate {

    private List<Object> list = new ArrayList<>();

    @Override
    public void add(Object object) {
        list.add(object);
    }

    @Override
    public void remove(Object object) {
        list.remove(object);
    }

    @Override
    public Iterator iterator() {
        return new ConIterator(list);
    }
}

interface Iterator<T> {
    T next();
    T first();
    boolean hasNext();
}

// 具體的迭代器
class ConIterator implements Iterator {

    private List<Object> list = null;
    private int index = -1;

    public ConIterator(List<Object> list) {
        this.list = list;
    }

    @Override
    public Object next() {
        Object object = null;
        if (this.hasNext()) {
            object = list.get(++index);
        }
        return object;
    }

    @Override
    public Object first() {
        index = 0;
        Object object = list.get(index);
        return object;
    }

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

迭代器的使用

        Iterator iterator = aggregate.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

迭代器的使用一般都是這種形式,我們不需要知道aggregate中數據結構是怎麼樣的,只需要獲取它的迭代器,並且通過接口就可以遍歷對象了。

總的來說,迭代器一般會有這幾個接口,hasNext、next、remove,而迭代器數據的來源由具體需要被遍歷的對象給出,一般通過構造方法傳入迭代器,或者直接在內部實現迭代器,而迭代器的作用主要是:輸出一個數據,並且把指針移向下一個數據,判斷數據是否已經遍歷完成,刪除其中一個數據。迭代器對數據的操作是單個進行的。

4. 迭代器模式在Android中的應用

Cursor cursor = db.query("user", new String[]{"name"}, null, null, null, null, null);
                String textview_data = "";
                while(cursor.moveToNext()){
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                }

相信大家都用過Sqlite數據庫,原生的請求方式如上,這裏的Cursor就相當於Iterator,db是database,也就是具體需要被迭代的對象。

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