1 简介
迭代器模式(Iterator Pattern)定义:提供一种方法来访问聚合对象,遍历聚合对象中每个元素,而不用暴露该对象的内部表示。
2 代码
2.1 普通方法实现
(1)抽象迭代器(Iterator)
public interface Iterator {
public boolean hasNext();
public Object next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
}
(2)具体迭代器(ConcreteIterator)
public class ConcreteIterator implements Iterator {
private ConcreteAggregate aggregate;
private int index=0;
public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate=aggregate;
}
@Override
public boolean hasNext() {
return index < aggregate.obj.length;
}
@Override
public Object next() {
return aggregate.obj[index++];
}
}
(3)抽象聚合类(Aggregate)
public interface Aggregate {
public Iterator createIterator();
}
(4)具体聚合类(ConcreteAggregate)
public class ConcreteAggregate implements Aggregate{
public Object[] obj={"dog","pig","cat","monkey"};
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
}
(5)客户端(Client)
public class Client {
public static void main(String[] args) {
Aggregate aggregate=new ConcreteAggregate();
Iterator iterator=aggregate.createIterator();
while(iterator.hasNext()) {
String s=(String) iterator.next();
System.out.println(s);
}
}
}
2.2 内部类实现
具体聚合类(ConcreteAggregate)和 具体迭代器(ConcreteIterator)如下,其他角色不变。
public class ConcreteAggregate implements Aggregate{
private Object[] obj={"dog","pig","cat","monkey"};
@Override
public Iterator createIterator() {
return new ConcreteIterator();
}
private class ConcreteIterator implements Iterator{
private int index=0;
@Override
public boolean hasNext() {
return index < obj.length;
}
@Override
public Object next() {
return obj[index++];
}
}
}