迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。
把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所
提供一种可以遍历聚合对象的方式,又称为:游标cursor模式
聚合对象:存储数据
迭代器:遍历数据
JDK内置iterator 正向迭代 反向迭代
设计原则:一个类应该只有一个引起变化的原因。
看一个简单的迭代器模式Demo:
public interface MyIterator { Object first(); Object last(); Object next(); boolean hasNext(); boolean isFirst(); boolean isLast(); } public class ConcreteAggregate { private List<Object> list; public ConcreteAggregate() { list = new ArrayList<>(); } public void add(Object obj) { list.add(obj); } public void remove(Object obj) { list.remove(obj); } public void setList(List<Object> list) { this.list = list; } public List<Object> getList() { return list; } public MyIterator createIterator() { return new ConcreteIterator(); } //使用内部类来实现具体的iterator 面向接口编程 public class ConcreteIterator implements MyIterator { private int cur; @Override public Object first() { return list.get(0); }@Override public boolean hasNext() { return cur<list.size()? true : false; }@Override public boolean isFirst() { return cur==0? true : false; }@Override public boolean isLast() { return cur==list.size()-1? true : false; }@Override public Object last() { return list.get(list.size()-1); }@Override public Object next() { if(cur < list.size()) return list.get(cur++); else return null; } } } public class Client { public static void main(String[] args) { ConcreteAggregate cag = new ConcreteAggregate(); for(int i=0; i<26; i++) { cag.add((char)(i+'a')+""); } MyIterator iterator = cag.createIterator(); System.out.print(iterator.first()); iterator.next(); while(iterator.hasNext()) { System.out.print(" " + iterator.next()); } } }
运行结果:
a b c d e f g h i j k l m n o p q r s t u v w x y z