迭代器模式(Iterator)
2020-04-21 本文已影响0人
剑道_7ffc
一句话总结
容器和集合访问
内容
提供一种顺序访问集合或容器的接口,无须暴露内部结构;本质是将抽离集合对象到迭代器,提供一致访问接口。
场景
寄件迭代分发;刷卡支付;
类图

代码示例
//抽象迭代器
public interface Iterator<E> {
E next();
boolean hasNext();
}
//具体迭代器
public class ConcreteIterator<E> implements Iterator<E> {
private List<E> list;
private int cursor = 0;
public ConcreteIterator(List<E> list) {
this.list = list;
}
public E next() {
return this.list.get(this.cursor ++);
}
public boolean hasNext() {
return this.cursor < this.list.size();
}
}
//抽象容器
public interface IAggregate<E> {
boolean add(E element);
boolean remove(E element);
Iterator<E> iterator();
}
//具体容器
public class ConcreteAggregate<E> implements IAggregate<E> {
private List<E> list = new ArrayList<E>();
public boolean add(E element) {
return this.list.add(element);
}
public boolean remove(E element) {
return this.list.remove(element);
}
public Iterator<E> iterator() {
return new ConcreteIterator<E>(this.list);
}
}
public class Test {
public static void main(String[] args) {
//来一个容器对象
IAggregate<String> aggregate = new ConcreteAggregate<String>();
//添加元素
aggregate.add("one");
aggregate.add("two");
aggregate.add("three");
//获取容器对象迭代器
Iterator<String> iterator = aggregate.iterator();
//遍历
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
}
}
运行结果
