设计模式之(十二)--迭代器模式(iterator)

    技术2022-05-19  25

    Iterator模式定义:提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。下面是Iterator模式的结构图:

     

    在这个结构图中的Aggregate抽象类也可以定义成接口。

    代码示例:

    //iterator操作接口 interface Iterator<E> { public void first(); public void next(); public E currentItem(); public boolean isDone(); } //iterator操作实现 public class ConcreteIterator<E> implements Iterator<E> { private ConcreteAggregate<E> agg; private int index = 0; private int size = 0; public ConcreteIterator(ConcreteAggregate<E> aggregate) { this.agg = aggregate; this.index = 0; this.size = aggregate.size(); } public E currentItem() { return agg.getElement(index); } public void first() { index = 0; } public boolean isDone() { if (index >= size) { return true; } return false; } public void next() { if (index < size) { index++; } } } //数据保存接口提供获得Iterator对象方法 public abstract class Aggregate<E>{ protected abstract Iterator<E> createIterator(); } //数据保存实现 public class ConcreteAggregate<E> extends Aggregate<E> { private ArrayList<E> arrayList = new ArrayList<E>(); public Iterator<E> createIterator() { return new ConcreteIterator<E>(this); } public void add(E o) { arrayList.add(o); } public E getElement(int index) { if (index < arrayList.size()) { return arrayList.get(index); } else { return null; } } public int size() { return arrayList.size(); } } public class Client { public static void main(String[] args) { ConcreteAggregate<String> aggregate = new ConcreteAggregate<String>(); aggregate.add("A"); aggregate.add("B"); aggregate.add("C"); aggregate.add("D"); aggregate.add("E"); Iterator<String> iterator = aggregate.createIterator(); for (iterator.first(); !iterator.isDone(); iterator.next()) { System.out.println(iterator.currentItem()); } } }

    输出结果:ABCDE

    在这个例子中,我们按照Iterator模式的结构图来创建的例子,我们创建的集合ConcreteAggregate可以存放任何类型的数据,然后使用createIterator方法转换成Iterator对象,使用Iterator对象来按顺序显示集合中的内容。这个模式在Java的jdk中是这样实现的,所以的集合类都实现了Iterable接口,这个接口中有一个iterator方法可以把集合类的对象转换成Iterator类的对象。明白这个原理可以更好的理解Java中的集合类和迭代器,根据这个可以创建功能更加强大的集合类。小结:Iterator模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。来源:http://www.blogjava.net/flustar/archive/2007/12/04/iterator.html


    最新回复(0)