迭代器模式

来源:互联网 发布:用python做科学计算pdf 编辑:程序博客网 时间:2024/06/03 03:23

迭代器模式

定义:

迭代器模式是一种行为型模式,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

主要解决:不同的方式来遍历整个整合对象

优点

  • 它支持以不同的方式遍历一个聚合对象。

  • 迭代器简化了聚合类。

  • 在同一个聚合上可以有多个遍历。

  • 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点

由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。


实例代码

定义一个List的迭代器和一个数组迭代器,分别添加元素,遍历打印结果。

  • Iterator接口
public interface Iterator<T> {    boolean hasNext();    T next();}
  • ArrayIterator类
public class ArrayIterator<T> implements Iterator<T> {    private T[] array;    private int currentIndex = -1;    public ArrayIterator(T[] array) {        this.array = array;    }    @Override    public boolean hasNext() {        if (array == null) {            return false;        }        if (array.length - currentIndex - 1 > 0) {            return true;        }        return false;    }    @Override    public T next() {        currentIndex++;        return array[currentIndex];    }}
  • ListIterator类
public class ListIterator<T> implements Iterator<T> {    private List<T> list;    private int currentIndex = -1;    public ListIterator(List<T> list) {        this.list = list;    }    @Override    public boolean hasNext() {        if (list == null) {            return false;        }        if (list.size() - currentIndex - 1 > 0) {            return true;        }        return false;    }    @Override    public T next() {        currentIndex++;        return list.get(currentIndex);    }}

main入口使用

 public static void main(String[] args) {        String[] array = new String[]{"cat", "dog", "tiger"};        Iterator<String> iterator = new ArrayIterator<>(array);        while (iterator.hasNext()) {            System.out.println(iterator.next());        }        System.out.println("------------------------------");        List<String> list = new ArrayList<>();        list.add("zhangsan");        list.add("lisi");        list.add("laowang");        iterator = new ListIterator<>(list);        while (iterator.hasNext()){            System.out.println(iterator.next());        }    }

打印结果:

catdogtiger------------------------------zhangsanlisilaowang

这种模式在Java中有比较多的实现,这里仅仅是学习用。

0 0
原创粉丝点击