迭代器模式,又叫游標模式.
package iterator;

public interface Aggregate<E>
{
public Iterator<E> createIterator();
public int length();
public E get(int index);
public void add(E obj);
}
package iterator;

import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate<E> implements Aggregate<E>
{
private List<E> items = new ArrayList<E>();
public Iterator<E> createIterator()
{
return new ConcreteIterator<E>(this);
}
public int length()
{
return items.size();
}
public E get(int index)
{
return (E) items.get(index);
}
public void add(E obj)
{
items.add(obj);
}
}
package iterator;

public interface Iterator<E>
{
public E first();
public boolean hasNext();
public E next();
public E current();
}
package iterator;

public class ConcreteIterator<E> implements Iterator<E>
{
private Aggregate<E> aggregate;
private int currentIndex = 0;
public ConcreteIterator(Aggregate<E> aggregate)
{
this.aggregate = aggregate;
}
public E first()
{
currentIndex = 0;
if (hasNext())
{
return aggregate.get(currentIndex);
}
else
{
return null;
}
}
public boolean hasNext()
{
return (currentIndex < aggregate.length());
}
public E next()
{
currentIndex++;
if (hasNext())
{
return aggregate.get(currentIndex);
}
else
{
return null;
}
}
public E current()
{
return aggregate.get(currentIndex);
}
}
package iterator;

public class Test
{
public static void main(String[] args)
{
Aggregate<String> a = new ConcreteAggregate<String>();
a.add("111");
a.add("222");
a.add("333");
Iterator<String> it = a.createIterator();
for (String s = it.first(); it.hasNext(); s = it.next())
{
System.out.println(s);
}
}
}
提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內部細節。
在迭代器模式中,具體迭代器角色和具體容器角色是耦合在一起的 —— 遍歷算法是與容器的內部細節緊密相關的。為了使客戶程序從與具體迭代器角色耦合的困境中脫離出來,避免具體迭代器角色的更換給客戶程序帶來的修改,迭代器模式抽象了具體迭代器角色,使得客戶程序更具一般性和重用性。這被稱為多態迭代
迭代器模式的組成部份
1.集合,一個接口,規定了具體集合需要實現的操作.
2.具體集合,是實現集合接口的實例,具體集合按著一定的結構存儲對象,具體集合應當有一個方法返回針對該集合的具體迭代器.
3.迭代器, 一個接口,規定了遍歷集合的方法.
4.具體迭代器
迭代器各組成部份之間的關系
例子:
集合:













具體集合:































迭代器:













具體迭代器:


















































測試類:




















迭代器的優點:
1、支持以不同的方式遍歷一個容器角色。根據實現方式的不同,效果上會有差別。
2、簡化了容器的接口。但是在java Collection中為了提高可擴展性,容器還是提供了遍歷的接口。
3、對同一個容器對象,可以同時進行多個遍歷。因為遍歷狀態是保存在每一個迭代器對象中的。