10.4.4 迭代器模式

更新于 2026年10月10日 版权声明
10.4.4 迭代器模式

迭代器模式就是顺序访问一个聚集对象中的各个元素,而不暴露该对象的内部表示。该模式的关键思想是将对列表的访问和遍历从列表对象中分离出来,并放入一个迭代器对象中。这句话包含两层意思:一是需要遍历的对象即聚集对象;二是迭代器对象用于对聚集对象进行遍历访问,如图10-7所示。迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪当前的元素。一般来说,迭代器模式在集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。

图示

图10-7 迭代器模式示例

MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且有Collection实例。

首先,定义两个接口:

 public interface Collection{

  public Iterator iterator();

  /*取得集合元素*/

  public Object get(int i);

  /*取得集合大小*/

  public int size();

 }

 public interface Iterator{

  //前移

  public Object previous();

  //后移

  public Object next();

  public boolean hasNext();

  //取得第一个元素

  public Object first();

 }

其次,定义两个实现类:

 public class MyCollection implements Collection{

  public String string[]={"A","B","C","D","E"};

  @Override

  public Iterator iterator(){

    return new MyIterator(this);

  }

  @Override

  public Object get(int i){

    return string[i];

  }

  @Override

  public int size(){

    return string.length;

  }

 }

 public class MyIterator implements Iterator{

  private Collection collection;

  private int pos=-1;

  public MyIterator(Collection collection){

    this.collection=collection;

  }

  @Override

  public Object previous(){

    if(pos>0){

      pos--;

    }

    return collection.get(pos);

  }

  @Override

  public Object next(){

    if(pos<collection.size()-1){(https://www.daowen.com)

      pos++;

    }

    return collection.get(pos);

  }

  @Override

  public boolean hasNext(){

    if(pos<collection.size()-1){

      return true;

    }else{

      return false;

    }

  }

  @Override

  public Object first(){

    pos=0;

    return collection.get(pos);

  }

 }

  @Override

  public boolean hasNext(){

    if(pos<collection.size()-1){

      return true;

    }else{

      return false;

    }

  }

  @Override

  public Object first(){

    pos=0;

    return collection.get(pos);

  }

 } public class Test{

  public static void main(String[]args){

    Collection collection=new MyCollection();

    Iterator it=collection.iterator();

    while(it.hasNext()){

      System.out.println(it.next());

    }

  }

 }

测试:

 public class Test{

  public static void main(String[]args){

    Collection collection=new MyCollection();

    Iterator it=collection.iterator();

    while(it.hasNext()){

      System.out.println(it.next());

    }

  }

 }

输出:

A B C D E

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)