迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。
把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所
提供一种可以遍历聚合对象的方式,又称为:游标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