Android高级技术Android开发经验谈Android技术知识

Android 架构师之路16 设计模式之迭代器模式

2018-02-01  本文已影响119人  香沙小熊

Android 架构师之路 目录

1、迭代器模式概念

1.1 介绍

迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。
源于对容器的访问,比如java中的list,Map,数组等,我们知道对容器对象的访问必然是多种多样的,所以我们把遍历的方法封装在容器中,或者不提供遍历方法。

1.2 定义

提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。

1.3 使用场景

2、迭代器模式UML类图

迭代器模式UML类图

角色如下:

3、迭代器模式实现

Iterator:
/**
*抽象迭代接口
*/
public interface Iterator <T>{

    /**
     * 是否有下一元素
     * @return
     */
    boolean hasNext();

    T next();
}
ConcreteItertor:
/**
 * 具体的迭代角色
 */
public class ConcreteItertor<T> implements Iterator<T>{
    public ConcreteItertor(List<T> list) {
        this.list = list;
    }
    private List<T> list = new ArrayList<>();
    private int cursor = 0;
    @Override
    public boolean hasNext() {
        return cursor!=list.size();
    }

    @Override
    public T next() {
        T obj = null;
        if(this.hasNext()){
            obj = list.get(cursor++);
        }
        return obj;
    }
}
Aggregate:
/**
 * 容器的接口
 */
public interface Aggregate<T> {
    void add(T t);

    void remove(T t);

    Iterator<T> iterator();
}

ConcreteAggregate:
public class ConcreteAggregate<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<T> iterator() {
        return new ConcreteItertor<>(list);
    }
}
Client:
public class Client {
    public static void main(String[] args){
        //实例化容器类对象
        Aggregate<String> aggregate = new ConcreteAggregate<>();
        aggregate.add("aaaa");
        aggregate.add("bbbb");
        aggregate.add("cccc");
        Iterator<String> iterator = aggregate.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

结果输出:

aaaa
bbbb
cccc

4、Android源码中的模式实现

1.除了各种数据结构体,如List,Map等包含的迭代器外
2.Android自身源码中也为我们提供了迭代器遍历数据,最为典型的例子就是数据库查询使用Cursor(当我们使用SQLiteDatabase的query方法查询数据库时返回的),该游标对象实质就是一个具体的迭代器,我们可以使用它来遍历数据库查询所得的结果集

5、模式总结

5.1 优点
5.2 缺点
上一篇 下一篇

猜你喜欢

热点阅读