首页 理论教育 软件系统分析与体系结构设计:迭代器模式

软件系统分析与体系结构设计:迭代器模式

时间:2023-10-16 理论教育 版权反馈
【摘要】:迭代器模式就是顺序访问一个聚集对象中的各个元素,而不暴露该对象的内部表示。该模式的关键思想是将对列表的访问和遍历从列表对象中分离出来,并放入一个迭代器对象中。迭代器对象负责跟踪当前的元素。一般来说,迭代器模式在集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。图10-7迭代器模式示例MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且有Collection实例。

软件系统分析与体系结构设计:迭代器模式

迭代器模式就是顺序访问一个聚集对象中的各个元素,而不暴露该对象的内部表示。该模式的关键思想是将对列表的访问和遍历从列表对象中分离出来,并放入一个迭代器对象中。这句话包含两层意思:一是需要遍历的对象即聚集对象;二是迭代器对象用于对聚集对象进行遍历访问,如图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){(www.xing528.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

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈