迭代器模式
提供一种统一的方法顺序访问容器对象中各个元素,而又不暴露该对象的内部细节,容器对象指数组、集合等
数据集
核心概念
- Iterator 迭代器接口,定义next和hasNext方法
- ConcreteIterator 具体的迭代器实现
- Collection 容器接口,定义iterator方法来创建Iterator对象
- ConcreteCollection 容器实现类,创建具体的迭代器对象ConcreteIterator
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
public interface Iterator<E> {
void first();
E next();
boolean hasNext();
}
public class ConcreteIterator<E> implements Iterator<E>{
private ConcreteCollection<E> collection;
private int index = 0;
public ConcreteIterator(ConcreteCollection<E> collection){ this.collection = collection; }
@Override public void first() { index = 0; }
@Override public E next() { int i = index; if(hasNext()){ index = i+1; return collection.get(i); }
return null;
}
@Override public boolean hasNext() { if(index == collection.size()){ return false; } return true; } }
public interface Collection<E> { Iterator<E> iterator(); }
public class ConcreteCollection<E> implements Collection<E>{
private E[] arrays;
public ConcreteCollection(E[] arrays){ this.arrays = arrays; }
@Override public Iterator<E> iterator() { return new ConcreteIterator<>(this); }
public E get(int index){ E ele = null; if(index < arrays.length){ ele = arrays[index]; } return ele; }
public int size(){ return arrays.length; } }
|
优缺点
优点
缺点
使用场景
- 访问一个聚合对象的内容而无须暴露它的内部表示
- 支持对聚合对象的多种遍历
- 为遍历不同的聚合结构提供一个统一的接口