概念:
提供一种一致的方法来顺序遍历一个容器中的所有元素
适用:
1.访问一个聚合对象的内容而无需暴露它的内部表示。
2.支持对聚合对象的多种遍历。
3.为遍历不同的聚合结构提供一个统一的接口(即,多态迭代)。
迭代器模式的优缺点
迭代器模式的优点:
简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了。 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。
迭代器模式的缺点: 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像ArrayList,我们宁可愿意使用for循环和get方法来遍历集合。
示例代码:
/** * 迭代器接口 */ public interface Iterator { //前移 public Object previous(); //后移 public Object next(); public boolean hasNext(); //取得第一个元素 public Object first(); }
/** * 聚集接口 */ public interface Aggregate { public Iterator CreateIterator(); /*取得集合元素*/ public Object get(int i); /*取得集合大小*/ public int size(); }
/** * 具体迭代器类 */ public class ConcreteIterator implements Iterator { private Aggregate collection; private int pos = -1; public ConcreteIterator(Aggregate collection){ this.collection = collection; } public Object previous() { if(pos > 0){ pos--; } return collection.get(pos); } public Object next() { if(pos /** * 具体聚集类 */ public class ConcreteAggregate implements Aggregate { public String string[] = {"A","B","C","D","E"}; public Iterator CreateIterator() { return new ConcreteIterator(this); // 把数组传进 } public Object get(int i) { return string[i]; } public int size() { return string.length; } }/** * 迭代器模式的测试 * 实现 :遍历集合 */ public class Test { public static void main(String[] args) { Aggregate aggregate = new ConcreteAggregate(); Iterator it = aggregate.CreateIterator(); while(it.hasNext()){ System.out.println(it.next()); } } }