首页 > 其他 > 详细

设计模式之迭代器模式

时间:2014-05-13 09:11:13      阅读:334      评论:0      收藏:0      [点我收藏+]

Iterator模式定义:

  提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。

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

bubuko.com,布布扣

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




设计模式之迭代器模式,布布扣,bubuko.com

设计模式之迭代器模式

原文:http://blog.csdn.net/lu930124/article/details/25559003

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!