一、定义
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
二、角色
1、Iterator(抽象迭代器):定义访问和遍历元素的接口。
2、ConcreteIterator (具体迭代器):具体迭代器实现迭代器接口。
3、Aggregate (抽象集合):定义创建相应迭代器对象的接口
4、ConcreteAggregate (具体集合):实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例
三、demo
1、抽象迭代器
package com.example.interator;
public interface Iterator<E> {
boolean hasNext();
E next();
}
2、具体迭代器
package com.example.interator;
import java.util.List;
public class ConcreteInterator<E> implements Iterator<E> {
private List<E> list;
private int cursor = 0;
public ConcreteInterator(List<E> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return cursor < list.size();
}
@Override
public E next() {
E e = null;
if (hasNext()) {
e = list.get(cursor++);
}
return e ;
}
}
3、抽象集合类
package com.example.interator;
public interface Aggregate<E> {
void add(E e);
void remove(E e);
Iterator<E> iterator();
}
4、具体集合类
package com.example.interator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate<E> implements Aggregate<E>{
private List<E> list = new ArrayList<E>();
@Override
public void add(E e) {
list.add(e);
}
@Override
public void remove(E e) {
list.remove(e);
}
@Override
public Iterator<E> iterator() {
return new ConcreteInterator<E>(list);
}
}
5、客户类
package com.example.interator;
public class Client {
public static void main(String[] args) {
ConcreteAggregate<String> aggregate = new ConcreteAggregate<String>();
aggregate.add("aaa");
aggregate.add("bbb");
//遍历
Iterator<String> iterator = aggregate.iterator();
while (iterator.hasNext()) {
String result = iterator.next();
System.out.println("结果: " + result);
}
}
}
打印结果
结果: aaa
结果: bbb