《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,也就是具体需要被迭代的对象。

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