The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

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模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。


 

posted on 2010-09-09 16:44 Eric_jiang 阅读(228) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: