提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
【角色】
- 迭代器接口(Iterator): 负责定义、访问和遍历元素的接口。
- 具体迭代器类(ConcreteIterator): 目的主要是实现迭代器接口,并记录遍历的当前位置。
- 容器接口(Aggregate): 负责提供创建具体迭代器角色的接口。
具体容器类(ConcreteAggregate): 具体迭代器角色与该容器相关联。
/*** 迭代器接口*/public interface Iterator<E> {/*** 是否还有下一个元素* @return*/boolean hasNext();/*** 返回当前位置的元素并将位置移动到下一位* @return*/E next();}
/*** 具体迭代器类*/public class ConcreteIterator<E> implements Iterator<E> {/*** 记录迭代位置*/private int cursor = 0;private List<E> list;public ConcreteIterator(List<E> list) {this.list = list;}@Overridepublic boolean hasNext() {return cursor != list.size();}@Overridepublic E next() {E obj = null;if (hasNext()) {obj = list.get(cursor++);}return obj;}}
/*** 容器接口*/public interface Aggregate<E> {/*** 添加* @param e*/void add(E e);/*** 删除* @param e*/void remove(E e);/*** 获取迭代器* @return*/Iterator<E> iterator();}
/*** 具体容器类*/public class ConcreteAggregate<E> implements Aggregate<E> {/*** 模拟具体容器*/private List<E> list = new ArrayList<>();@Overridepublic void add(E e) {list.add(e);}@Overridepublic void remove(E e) {list.remove(e);}@Overridepublic Iterator iterator() {return new ConcreteIterator(list);}}
public class IteratorTest {public static void main(String[] args) {// 创建容器Aggregate aggregate = new ConcreteAggregate();aggregate.add(1);aggregate.add(2);aggregate.add(3);aggregate.add(4);// 获取迭代器Iterator iterator = aggregate.iterator();while (iterator.hasNext()) {System.out.println("迭代:" + iterator.next());}}}----输出----迭代:1迭代:2迭代:3迭代:4
