设计模式--Iterator迭代器模式(Java例子)

本文介绍了迭代器模式的定义及其在Java中的实现方式。通过具体示例展示了如何利用迭代器模式遍历集合对象,并讨论了其在集合类元素变动频繁场景下的应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.blogjava.net/flustar/archive/2007/12/04/iterator.html

Iterator模式定义:
提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。
这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。今天面试考到设计模式,我愣是没答上来,我晕死,自己这几天刚学的东西,自己也都理解,可一到考试的时候不是忘了就是回答的不准确,自己也不清楚到底是为什么,哎,伤心。。。。。。,下面是Iterator模式的结构图:

 在这个结构图中的Aggregate(此单词是集合的意思)抽象类也可以定义成接口。下面给出一个例子来说明Iterator模式的使用。
import java.util.ArrayList;

interface Iterator<E>{
public void first();
public void next();
public E currentItem();
public boolean isDone();
}


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++;
       }
     }
}


abstract class Aggregate<E>{
    protected abstract Iterator createIterator();
}


class ConcreteAggregate<E> extends Aggregate<E>{
   private ArrayList<E> arrayList=new ArrayList<E>();
   public Iterator 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 iterator=aggregate.createIterator();
      for(iterator.first();!iterator.isDone();iterator.next()){
           System.out.println(iterator.currentItem());
      }
    }
}
输出结果:
A
B
C
D
E
在这个例子中,我们按照Iterator模式的结构图来创建的例子,我们创建的集合ConcreteAggregate可以存放任何类型的数据,然后使用createIterator方法转换成Iterator对象,使用Iterator对象来按顺序显示集合中的内容。这个模式在Java的jdk中是这样实现的,所以的集合类都实现了Iterable接口,这个接口中有一个iterator方法可以把集合类的对象转换成Iterator类的对象。明白这个原理可以更好的理解Java中的集合类和迭代器,根据这个可以创建功能更加强大的集合类。
小结:Iterator模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。

【比如当iterator.next()函数的意义改成每次获取下面间隔两个元素后的一个元素时,上面的客户去代码即main函数中代码可以永远不改变,也就是我们只需要修改迭代器类或集合类的代码就行了,不用该客户类的代码】

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值